我有这张桌子
ID colname F1 F2 F3 F4
1 P1 1 2 3 4
1 P2 5 6 7 8
1 P3 9 10 11 12
1 P4 13 14 15 16
2 P1 17 18 19 20
2 P2 21 22 23 24
2 P3 25 26 27 28
2 P4 29 30 31 32
我试图产生这个结果Pn值对应于Fn
ID P1 P2 P3 P4
1 1 6 11 16
2 17 22 27 32
你可以给我一些关于如何在SQL Server中完成的提示和关键词吗?
我一直在和Pivot玩,但这是要走的路吗?
答案 0 :(得分:3)
你可以这样做:
select
id,
max(case when colname = 'P1' then F1 end) as P1,
max(case when colname = 'P2' then F2 end) as P2,
max(case when colname = 'P3' then F3 end) as P3,
max(case when colname = 'P4' then F4 end) as P4
from Table1
group by id
<强> sql fiddle demo 强>
答案 1 :(得分:1)
如果您想要使用PIVOT
的解决方案:
SELECT *
FROM (
SELECT ID,colname,value
FROM MyTable
UNPIVOT (value FOR col in ([F1],[F2],[F3],[F4])) a
WHERE REPLACE(col,'F','P') = colname
) b
PIVOT (MAX(value) FOR colname in ([P1],[P2],[P3],[P4])) c
UNPIVOT
跟随PIVOT
方法对于变换非常通用,但与罗马的示例一样,手动操作通常更容易,更易读。