SQL: кросс-таблица в Presto - PullRequest
       21

SQL: кросс-таблица в Presto

0 голосов
/ 11 октября 2019

У меня есть таблица, которая выглядит следующим образом:

shop    number  work    station accept  create  no.of entries
1   123 Maintain    Arrive  2019-10-11 0:00:00  2019-10-11 0:00:00  1
1   123 Maintain    WorkA   2019-10-11 0:00:00  2019-10-11 0:00:00  1
1   123 Maintain    WorkB   2019-10-11 0:00:00  2019-10-11 0:00:00  1
1   1234    Job Arrive  2019-10-11 0:00:00  2019-10-11 0:00:00  1
1   1234    Job WorkC   2019-10-11 0:00:00  2019-10-11 0:00:00  1
1   1234    Job WorkD   2019-10-11 0:00:00  2019-10-11 0:00:00  1

Я хочу преобразовать ее так, чтобы она выглядела так:

shop    number  work    arrival_accept  arrival_create  worka_accept    worka_create    workb_accept    workb_create    workc_accept    workc_create    workd_accept    workd_create    no.of entries
1   123 Maintain    2019-10-11 0:00:00  2019-10-11 0:00:00  2019-10-11 0:00:00  2019-10-11 0:00:00  2019-10-11 0:00:00  2019-10-11 0:00:00                  1
1   1234    Job 2019-10-11 0:00:00                      2019-10-11 0:00:00  2019-10-11 0:00:00  2019-10-11 0:00:00  2019-10-11 0:00:00  1

Я знаю, что в postgres мы могли бы использовать кросс-таблицу и сделатьэто случилосьОднако я не могу сделать это с Presto. Есть ли способ, которым я мог бы сделать это?

1 Ответ

1 голос
/ 11 октября 2019

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

select shop, number, work,
       max(case when station = 'Arrive' then accept end) as arrive_accept,
       max(case when station = 'Arrive' then create end) as arrive_create,
       max(case when station = 'WorkA' then accept end) as workA_accept,
       max(case when station = 'WorkA' then create end) as workA_create,
       . . .  -- and so on for the rest of the stations
from t
group by shop, number, work;

В противном случае вам нужно будет динамически построить запрос, чтобы сделать почти то же самое, но с переменным числом столбцов.

...