从列中生成额外的 SQL 行

Generating additional SQL rows from columns

在瞬间,我有表格的行

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

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

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

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

您可以通过对所需行数的子查询使用交叉连接来增加行数,例如

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 表达式根据提供的 "row number"(在我的示例中为 n.n)减少列数