将行转换为列

时间:2015-05-25 09:09:01

标签: 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 | 1testd
2 | 2testa | NULL   |   NULL | 2testd

我尝试在PIVOT中使用T-SQL,但它将聚合函数作为参数,我不想提供。

我怎样才能做到这一点。

1 个答案:

答案 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

会给你这个:

enter image description here

注意,当您使用PIVOT / UNPIVOT子句时,您需要指定列(在您的情况下为AB,{{1} },C)。如果您不想进行硬编码,则需要使用构建动态数据透视 - 这可以在D中构建T-SQL语句并使用string执行它。