sqlserver 列转行
时间: 2023-09-07 19:17:26 浏览: 39
在 SQL Server 中,可以使用 UNPIVOT 操作符将列转换为行。以下是一个示例:
假设有以下表:
```
CREATE TABLE TestTable
(
ID INT PRIMARY KEY,
Col1 INT,
Col2 INT,
Col3 INT
);
INSERT INTO TestTable (ID, Col1, Col2, Col3)
VALUES (1, 10, 20, 30),
(2, 40, 50, 60);
```
要将列 Col1、Col2 和 Col3 转换为行,可以使用以下查询:
```
SELECT ID, ColName, ColValue
FROM TestTable
UNPIVOT
(
ColValue FOR ColName IN (Col1, Col2, Col3)
) AS unpvt;
```
输出结果如下:
```
ID ColName ColValue
-- ------- --------
1 Col1 10
1 Col2 20
1 Col3 30
2 Col1 40
2 Col2 50
2 Col3 60
```
在 UNPIVOT 操作符中,ColValue 是要转换为行的列,而 ColName 是新生成的列,其中包含原始列的名称。可以在 IN 子句中指定要转换为行的列。
相关问题
sql server列转行
在 SQL Server 中,可以使用 `UNPIVOT` 关键字将列转换为行。
假设有以下表:
```
CREATE TABLE [dbo].[Sales](
[Product] [nvarchar](50) NULL,
[Year1] [int] NULL,
[Year2] [int] NULL,
[Year3] [int] NULL
)
INSERT INTO [dbo].[Sales] ([Product], [Year1], [Year2], [Year3])
VALUES
('Product1', 100, 200, 300),
('Product2', 400, 500, 600),
('Product3', 700, 800, 900)
```
要将 Year1、Year2 和 Year3 列转换为行,可以使用以下查询:
```
SELECT [Product], [Year], [Amount]
FROM
(SELECT [Product], [Year1], [Year2], [Year3]
FROM [dbo].[Sales]) p
UNPIVOT
([Amount] FOR [Year] IN
([Year1], [Year2], [Year3])
)AS unpvt;
```
查询结果如下:
```
Product Year Amount
--------------------------
Product1 Year1 100
Product1 Year2 200
Product1 Year3 300
Product2 Year1 400
Product2 Year2 500
Product2 Year3 600
Product3 Year1 700
Product3 Year2 800
Product3 Year3 900
```
在上面的查询中,我们首先选择了所有的列,然后使用 `UNPIVOT` 将 Year1、Year2 和 Year3 列转换为行。在 `UNPIVOT` 子句中,我们指定了要转换的列和转换后的列名。最后,我们使用 `AS` 关键字为子查询结果集定义别名 `unpvt`。
sqlserver列转行
您可以使用 SQL Server 中的 UNPIVOT 操作符将列转换为行。以下是一个示例查询,它使用 UNPIVOT 将列数据转换为行数据:
```
SELECT CustomerID, OrderDate, TotalAmount
FROM (
SELECT CustomerID,
[2019-01-01] AS JanTotalAmount,
[2019-02-01] AS FebTotalAmount,
[2019-03-01] AS MarTotalAmount
FROM PivotTable
) AS SourceTable
UNPIVOT (
TotalAmount FOR OrderDate IN (JanTotalAmount, FebTotalAmount, MarTotalAmount)
) AS UnpivotTable
```
在上面的查询中,我们先从使用 PIVOT 将行数据转换为列数据的 PivotTable 中选择了 CustomerID、JanTotalAmount、FebTotalAmount 和 MarTotalAmount 列,并将其作为子查询中的 SourceTable。然后,我们使用 UNPIVOT 将 JanTotalAmount、FebTotalAmount 和 MarTotalAmount 列中的值转换为 TotalAmount 列的值,并将 OrderDate 列的值设置为相应的月份。最终结果将是一个包含 CustomerID、OrderDate 和 TotalAmount 的表格,其中每个月的总金额作为一个单独的行。