sql - 以特定格式构造数据的 SQL 查询
问题描述
我有以下格式的数据。
ID month subid val1 val2
1 200411 a 10 20
1 200411 b 15 25
2 200411 x 9 12
2 200411 y 15 30
2 200411 z 50 11
您能告诉我如何编写查询以将其转换为以下格式。
ID month subid val1_1 val1_2 val1_3 val2_1 val2_2 val3_3
1 200411 a,b 10 15 null 20 25 null
2 200411 x,y,z 9 15 50 12 30 11
如果您有任何问题,请告诉我。非常感谢!!
解决方案
一种方法是条件聚合:
select id, month, collect_set(subid) as subids,
max(case when seqnum = 1 then val1 end) as val1_1,
max(case when seqnum = 2 then val1 end) as val1_2,
max(case when seqnum = 3 then val1 end) as val1_3,
max(case when seqnum = 1 then val2 end) as val2_1,
max(case when seqnum = 2 then val2 end) as val2_2,
max(case when seqnum = 3 then val2 end) as val2_3
from (select t.*, row_number() over (partition by id order by subid) as seqnum
from t
) t
group by id;
collect_set()
返回一个数组。这似乎比字符串更有用,但如果您愿意,可以将其转换为字符串表示形式。
推荐阅读
- window - Drools 窗口长度和行为
- c - 将字符串初始化为 {0, } 有什么作用?
- python - 这是一个异步问题吗?
- typescript - 定义索引类型时,可以限制存在的属性数量吗?
- syntax - 如何解决这种转变/减少冲突?
- python - Django import export 在导出前编辑查询集
- java - 尝试使用具有不一致数据类型的 REST API 作为响应
- css - 有没有办法使用 css 操作 SVG 的“内部笔画”?
- sql - 使用 ts-postgres 将多少行插入 SQL 数据库?
- postgresql - Golang 使用 SSL 证书连接到 Postgres