SQL转换交叉表数据透视数据

时间:2016-05-18 03:59:18

标签: sql sql-server sql-server-2008

我正在使用SQL Server 2008,并希望转换我的数据:

数据集:

ID   Item  Columns  Result
1     1      X       A
2     1      Y       B
3     1      Z       C
4     2      X       D
5     2      Y       E
6     2      Z      NULL
7     3      X       F
8     3      Y       G
9     3      Z       H

结果所需:

Item   X   Y   Z
 1     A   B   C
 2     D   E  NULL
 3     F   G   H

此时,我正在执行以下操作,然后将我需要的列粘贴到Excel中:

Select * from thisTable where Column=X
Select * from thisTable where Column=Y
Select * from thisTable where Column=Z

但是,并非所有行都匹配,并不能只是并排打击表格。对于没有Result的列,我希望NULL显示为填充行以使它们具有相同数量的记录。

我查了一下PIVOT,但我觉得这不适用......这种类型的数据转换叫做什么?我不认为这是一个交叉表...

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用条件聚合执行交叉表:

SELECT
    Item,
    [X] = MAX(CASE WHEN [Columns] = 'X' THEN Result END),
    [Y] = MAX(CASE WHEN [Columns] = 'Y' THEN Result END),
    [Z] = MAX(CASE WHEN [Columns] = 'Z' THEN Result END)
FROM thisTable
GROUP BY Item

答案 1 :(得分:2)

使用PIVOT

select  *
from    (
            select  Item, Columns, Result
            from    thisTable 
        ) t
pivot   (
            max (Result)
            for Columns in (X, Y, Z)
        ) p