我在数据库中有几个项目,如下所示:
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
我尝试在PIVOT
中使用T-SQL
,但它将聚合函数作为参数,我不想提供。
我怎样才能做到这一点。
答案 0 :(得分:2)
以下代码:
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
,{{1} },C
)。如果您不想进行硬编码,则需要使用构建动态数据透视 - 这可以在D
中构建T-SQL
语句并使用string
执行它。