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