[英]Combine multiple rows into single row with JSON object as columns
我有一个表,我试图通过将所有 ID/部分组合组合成一行(总共有 3 个部分)嵌套 JSON 来减少数据集。表架构如下所示:
| ID | Section | Country | Date |
| -------- | -------- | -------- | ------ |
| 1 | 1 | US | 1-1-11 |
| 1 | 2 | US | 1-1-11 |
| 1 | 3 | US | 1-1-11 |
| 1 | 1 | CA | 1-1-11 |
| 1 | 2 | CA | 1-1-11 |
| 1 | 3 | CA | 2-2-22 |
| 1 | 1 | MX | 2-2-22 |
| 1 | 2 | MX | 2-2-22 |
| 1 | 3 | MX | 2-2-22 |
| 2 | 1 | US | 3-3-33 |
我想执行一个查询,将其转换为将 id/section 和国家/地区和日期组合成 JSON 字符串的东西
| ID/Section | Country/dates |
| ---------- | ---------------------------------- |
| "1,1" | {"US;CA":”1-1-11;","MX":"2-2-22;"} |
| "1,2" | {"US;CA":”1-1-11;","MX":"2-2-22;"} |
| "1,3" | {"US":”1-1-11;","CA;MX":"2-2-22;"} |
| "2,1" | {"US":”3-3-33;"} |
为此,您需要两个分组依据并连接所需的列。
首先,我们按 id、section、date 分组,之后仅按 id 和 section。
select id || ',' || section as id_section, '{'|| listagg(temp, ',') || '}' as country_dates
from (select id, section, '"' || listagg(country, ';') || '"' || ':' || '"' || date || '"' as temp
from test.temp
group by id, section, date) as t1
group by id, section;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.