Как транспонировать результат? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть этот запрос

Select week(date_time) week,
      sum(X1) as X1,
      sum(X2) as X2,
      sum(X3) as X3,
      sum(X4) as X4
From Fee
Where date_time between '2020-07-01' and current_date

Я получил результат, как показано ниже:

week | X1 | X2 | X3 | X4
27   |
28   |
29   |
30   |
31   |

Но я хотел бы транспонировать результат, например:

week | 27 | 28 | 29 | 30 | 31
X1   |
X2   |
X3   |
X4   |

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 04 августа 2020

Если я понимаю вопрос, вы хотите развернуть данные и повторно агрегировать:

select v.x,
       sum(case when week(date_time) = 27 then 1 else 0 end) as week_27,
       sum(case when week(date_time) = 28 then 1 else 0 end) as week_28,
       sum(case when week(date_time) = 29 then 1 else 0 end) as week_29,
       sum(case when week(date_time) = 30 then 1 else 0 end) as week_30,
       sum(case when week(date_time) = 31 then 1 else 0 end) as week_31
from fee f left join lateral
     (values (f.x1), (f.x2), (f.x3), (f.x4)) v(x)
group by v.x

Presto также поддерживает filter, поэтому его лучше записать как:

select v.x,
       count(*) filter (where week(date_time) = 27) as week_27,
       count(*) filter (where week(date_time) = 28) as week_28,
       count(*) filter (where week(date_time) = 29) as week_29,
       count(*) filter (where week(date_time) = 30) as week_30,
       count(*) filter (where week(date_time) = 31) as week_31
from fee f left join lateral
     (values (f.x1), (f.x2), (f.x3), (f.x4)) v(x)
group by v.x

  
...