如何快速扁平化 SQL 表

Moo*_*osa 5 sql presto

我正在使用 Presto。如果我有一个像这样的表:

ID    CATEGORY     VALUE
1      a           ...
1      b
1      c
2      a
2      b
3      b 
3      d
3      e
3      f
Run Code Online (Sandbox Code Playgroud)

如果不为每个组合编写 case 语句,您将如何转换为以下内容?

ID      A     B    C    D    E    F
1
2
3
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 4

我从未使用过 Presto,文档看起来很薄,但根据这篇文章,您似乎可以这样做

SELECT
  id,
  kv['A'] AS A,
  kv['B'] AS B,
  kv['C'] AS C,
  kv['D'] AS D,
  kv['E'] AS E,
  kv['F'] AS F
FROM (
  SELECT id, map_agg(category, value) kv
  FROM vtable
  GROUP BY id
) t
Run Code Online (Sandbox Code Playgroud)

尽管我建议如果可能的话在显示层中执行此操作,因为您必须指定列。大多数报告工具和 UI 网格都支持某种动态旋转,这将根据源数据创建列。