SQL:Presto中的交叉表等价物

SQL:Presto中的交叉表等价物,sql,pivot,crosstab,presto,Sql,Pivot,Crosstab,Presto,我有一张这样的桌子: 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-1

我有一张这样的桌子:

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
我想将其转换为如下所示:

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

我知道在博士后我们可以使用交叉表来实现这一点。然而,我无法用普雷斯托做到这一点。有什么方法可以做到这一点吗?

您可以使用条件聚合。如果您知道所有电台,它看起来像:

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;
否则,您将需要动态构造查询,以执行几乎相同的操作,但列数是可变的