将行转换为列

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 子句时,您需要指定列(在您的情况下为 ABC, D).如果您不想硬编码,则需要使用以下方法构建动态数据透视表 - 这可以通过在 string 中构建 T-SQL 语句并使用 sp_executesql 执行它来完成。