首页 > 解决方案 > 从列生成额外的 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 功能,所以任何建议都将不胜感激!

标签: sqlpresto

解决方案


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

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在我的示例中)


推荐阅读