Поворот данных с помощью выражения CASE - PullRequest
1 голос
/ 18 апреля 2020

У меня следующий запрос, который получает магазин, номер недели и сумму проданных товаров:

select *
from 
(
  select store, week, xCount
  from yt
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

Можно ли получить тот же результат с помощью выражения CASE?

1 Ответ

2 голосов
/ 18 апреля 2020

Вы можете поворачиваться с условным агрегированием следующим образом:

select 
    store, 
    sum(case when week = 1 then xcount else 0 end) week1,
    sum(case when week = 2 then xcount else 0 end) week2,
    sum(case when week = 3 then xcount else 0 end) week3
from yt
group by store

Я склонен предпочесть условное агрегирование синтаксисам, заданным в базе данных c pivot:

  • условное агрегирование является более гибким, чем pivot

  • синтаксис работает во всех базах данных, поэтому он гораздо более переносим

  • производительность обычно эквивалент

...