sql - 从列生成额外的 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 功能,所以任何建议都将不胜感激!
解决方案
您可以通过对所需行数的子查询使用交叉连接来增加行数,例如
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
在我的示例中)
推荐阅读
- wordpress - Wordpress - 在所有帖子中批量取消选中次要类别
- bash - 并行:如何从函数中引用多个参数
- github - 为什么 GitHub 显示不存在的图像?
- qt - 当对象变为无线程时,如何防止 QBasicTimer::stop: Failed 警告?
- r - R 在 mathjax 条件案例中闪闪发光
- angular - 角材料底片不会在几秒钟内将数据绑定到内部内容?
- java - 如何使用 Java 和 MySql 在 Json 中获取正确的日期格式
- java - 使用 gradle bootJar 而不是 jar 任务并在 Jenkins 中构建失败
- reactjs - React Redux Firebase 文件上传
- ios - 如何在iOS swift中自动登录用户?