【问题标题】:SQL: Crosstab equivalent in PrestoSQL:Presto 中的交叉表等效项
【发布时间】:2020-02-09 08:47:15
【问题描述】:

我有一个如下所示的表格:

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 做到这一点。有没有办法做到这一点?

【问题讨论】:

    标签: sql pivot crosstab presto


    【解决方案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;
    

    否则,您将需要动态构造查询以执行几乎相同的操作,但列数可变。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2022-01-21
      • 2010-10-01
      • 2017-04-25
      相关资源
      最近更新 更多