我正试图完成一个复杂的聚合和连接查询,以准备导入到网站的数据,将多个结果行和列聚合为每个ID的一行。
我几乎做到了,只是我得到了很多NULL结果,尽管在源数据中没有NULL值。
来源数据:
id | value_1 | value_2 | value _3 | type|
---|---|---|---|---|
x1 | 某些文本 | 其他文本 | 更多文本 | >A2 |
x1 | 某些文本 | 其他文本更多文本 | >B1 | [/tr>|
x1 | 某些文本 | 其他文本更多文本 | >B2 | [/tr>|
x2 | 某些文本 | 其他文本 | 更多文本 | >B1 |
x2 | 某些文本 | 其他文本 | 更多文本 | >A2 |
x2 | 某些文本 | 其他文本 | 更多文本 | >B1 |
您希望每个id
有一行,因此,我将首先从select
和group by
子句中删除type
。接下来,case
表达式将进入聚合函数内部。因此:
select id,
string_agg(case when type = 'A2' then concat(cast(value_1 as nvarchar(max)), value_1, value_2, value_3) end, ',') as type_a2,
string_agg(case when type = 'B1' then concat(cast(value_1 as nvarchar(max)), value_1, value_2, value_3) end, ',') as type_b1
from mytable
group by id