我正在使用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,但我觉得这不适用......这种类型的数据转换叫做什么?我不认为这是一个交叉表...
谢谢!
答案 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