我有一个数据集,我需要从行转换为列。
我查看了pivot并没有真正解决问题,因为我需要特定的静态列标题(不匹配数据名称)。
以下是当前数据的存储方式:
Id | SpCode
-------------------------
1 AA
1 BB
1 CC
2 FF
2 LL
3 TT
3 YY
3 ZZ
3 XX
4 AA
4 BB
5 AA
6 WW
6 MM
6 PP
我需要像这样显示它。
我永远不会超过5列,并希望保持列名静态,以便我可以轻松加入并引用它。
ID SpCode1 |SpCode2 | SpCode3 | SpCode4 | SpCode5
1 AA |BB | CC
2 FF |LL
3 TT |YY |ZZ |XX
4 AA |BB
5 AA
6 WW |MM |PP
非常感谢任何帮助。
PS:使用SQL Server 2014
由于
奥伦
答案 0 :(得分:3)
一种方法是pivot
。另一个是条件聚合。我发现后者更容易使用:
select id,
max(case when seqnum = 1 then spcode end) as spcode_1,
max(case when seqnum = 2 then spcode end) as spcode_2,
max(case when seqnum = 3 then spcode end) as spcode_3,
max(case when seqnum = 4 then spcode end) as spcode_4,
max(case when seqnum = 5 then spcode end) as spcode_5
from (select t.*,
row_number() over (partition by id order by spcode) as seqnum
from t
) t
group by id;