SQL中的数据透视表(重复级别)

时间:2018-08-29 06:33:00

标签: sql pivot

我有一个关于在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

有人可以提供一些提示吗? 谢谢!

4 个答案:

答案 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;

但是,它不会产生您的实际输出(在与其他猫相比,猫只有一个值的情况下,它会留下空值),但是它将给出如何执行此操作的想法。