我有一个关于在SQL中旋转数据的问题。
输入数据: 表名temp
id cat value
1 A 22
1 B 33
1 C 44
1 C 55
我的理想输出是:
id A B C
1 22 33 44
1 22 33 55
有人可以提供一些提示吗? 谢谢!
答案 0 :(得分:2)
select * from
(
id,cat
)
as tablo
pivot
(
sum(value)
for cat in ([A],[B],[C])
) as p
order by id
答案 1 :(得分:0)
用例,假设您在第二行中的输出格式有误
select id, max( case when cat='A' then value end) as A,
max(case when cat='B' then value end) as B,
max(case when cat='C' then value end)as C from table
group by id
答案 2 :(得分:0)
使用CASE WHEN和MAX聚合:
select id, max(case when cat='A' then value end) as A,max(case when cat='B' then value end) as B,
max(case when cat='C' then value end) as C from temp
group by id
答案 3 :(得分:0)
您需要具有条件聚合的row_number()
函数:
select id, max(case when cat = 'a' then value end) a,
max(case when cat = 'b' then value end) b,
max(case when cat = 'c' then value end) c
from (select t.*, row_number() over (partition by id, cat order by value) as seq
from table t
) t
group by id, seq;
但是,它不会产生您的实际输出(在与其他猫相比,猫只有一个值的情况下,它会留下空值),但是它将给出如何执行此操作的想法。