从列中生成其他SQL行

时间:2018-12-12 03:52:42

标签: sql presto

首先,我有以下表格的行

name, var1, var2, var3
Foo, A, B, C

并且由于我需要按var1分组,也需要按var2和var3分组(分别进行分组),因此我想将每一行转换为以下形式的三行:

name, key
Foo, var1=A
Foo, var2=B
Foo, var3=C

这样我就可以按键分组。 Presto没有UNPIVOT功能,因此任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以通过对需要的行数的子查询进行交叉联接来增加行数。

select
      t.name
    , case when n.n = 1 then t.var1
           when n.n = 2 then t.var2
           when n.n = 3 then t.var3
      end as key
from sourcetbl t
cross join (
       select 1 as n union all
       select 2 as n union all
       select 3 as n
       ) n

然后可以使用case表达式根据所提供的“行数”(在我的示例中为n.n)来减少列数