将行转换为列
Translate rows to column
我在数据库中有一些项目,格式如下:
ID|ColName|ColValue
-------------------
1 |A |1testa
1 |B |1testb
1 |C |1testc
1 |D |1testd
2 |A |2testa
2 |D |2testd
我需要以下表格中的数据:
ID| A | B | C | D
1 | 1testa | 1testb | 1testc | 1testd
2 | 2testa | NULL | NULL | 2testd
我曾尝试在 T-SQL
中使用 PIVOT
,但它以聚合函数作为参数,我不想提供它。
我怎样才能做到这一点。
以下代码:
DECLARE @DataSource TABLE
(
[ID] TINYINT
,[ColName] CHAR(1)
,[ColValue] VARCHAR(12)
);
INSERT INTO @DataSource ([ID], [ColName], [ColValue])
VALUES (1, 'A', '1testa')
,(1, 'B', '1testb')
,(1, 'C', '1testc')
,(1, 'D', '1testd')
,(2, 'A', '2testa')
,(2, 'D', '2testd');
SELECT *
FROM @DataSource
PIVOT
(
MAX([ColValue]) FOR [ColName] IN ([A], [B], [C], [D])
) PVT
会给你这个:
请注意,当您使用 PIVOT
/UNPIVOT
子句时,您需要指定列(在您的情况下为 A
、B
、C
, D
).如果您不想硬编码,则需要使用以下方法构建动态数据透视表 - 这可以通过在 string
中构建 T-SQL
语句并使用 sp_executesql
执行它来完成。
我在数据库中有一些项目,格式如下:
ID|ColName|ColValue
-------------------
1 |A |1testa
1 |B |1testb
1 |C |1testc
1 |D |1testd
2 |A |2testa
2 |D |2testd
我需要以下表格中的数据:
ID| A | B | C | D
1 | 1testa | 1testb | 1testc | 1testd
2 | 2testa | NULL | NULL | 2testd
我曾尝试在 T-SQL
中使用 PIVOT
,但它以聚合函数作为参数,我不想提供它。
我怎样才能做到这一点。
以下代码:
DECLARE @DataSource TABLE
(
[ID] TINYINT
,[ColName] CHAR(1)
,[ColValue] VARCHAR(12)
);
INSERT INTO @DataSource ([ID], [ColName], [ColValue])
VALUES (1, 'A', '1testa')
,(1, 'B', '1testb')
,(1, 'C', '1testc')
,(1, 'D', '1testd')
,(2, 'A', '2testa')
,(2, 'D', '2testd');
SELECT *
FROM @DataSource
PIVOT
(
MAX([ColValue]) FOR [ColName] IN ([A], [B], [C], [D])
) PVT
会给你这个:
请注意,当您使用 PIVOT
/UNPIVOT
子句时,您需要指定列(在您的情况下为 A
、B
、C
, D
).如果您不想硬编码,则需要使用以下方法构建动态数据透视表 - 这可以通过在 string
中构建 T-SQL
语句并使用 sp_executesql
执行它来完成。