Сводные данные в SQL (повторные уровни) - PullRequest
0 голосов
/ 29 августа 2018

У меня есть вопрос относительно поворота данных в 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 голосов
/ 29 августа 2018

Вам нужна 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;

Тем не менее, он не производит ваш фактический результат (он оставляет нулевое значение, когда у кота есть только одно значение по сравнению с другими кошками), но он даст представление о том, как это сделать.

0 голосов
/ 29 августа 2018

Использовать СЛУЧАЙ КОГДА и МАКС. Агрегация:

   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
0 голосов
/ 29 августа 2018
select * from
(
id,cat
)
as tablo
pivot
(
sum(value)
for cat in ([A],[B],[C])
) as p
order by id
0 голосов
/ 29 августа 2018

случай использования, если вы допустили ошибку в выходном формате во 2-й строке

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
...