从行创建列
Creating columns from rows
我有这个table
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 服务器中完成它的提示和关键词吗?
我一直在玩 Pivot,但它适合我吗?
你可以这样做:
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
如果您想要一个使用 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
followed PIVOT
方法对于转换非常通用,但通常像 Roman 的示例那样手动执行它更容易和更具可读性。
我有这个table
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 服务器中完成它的提示和关键词吗?
我一直在玩 Pivot,但它适合我吗?
你可以这样做:
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
如果您想要一个使用 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
followed PIVOT
方法对于转换非常通用,但通常像 Roman 的示例那样手动执行它更容易和更具可读性。