Sql 将行转换为列
我在数据库中有以下表格中的一些项目:Sql 将行转换为列,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,我在数据库中有以下表格中的一些项目: 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 | 1test
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
)。如果您不想硬编码,那么您需要使用-构建动态透视,这可以通过在字符串中构建T-SQL
语句并使用sp\u executesql
执行来完成 这也值得一读:哦,我在想应该使用什么聚合函数。我需要用MAX。谢谢@Saksham是的,通过字符串旋转时,可以使用MIN
或MAX
。