问题:
有时,想要将某字段在查询列表的时候,按分组的不同,同组字符串累加拼接起来。
原表数据内容如下:

想要达到的目标结果:是把cdate_tno的字符串分组累加拼接起来,如下:

解决方案:
使用聚合函数 string_agg,示例如下:
SELECT string_agg(cdate_tno, ',')cdate_tno,arch_id FROM t_month_bill
GROUP BY arch_id
string_agg(cdate_tno, ',')中第一个参数是需要聚合拼接的字段名(或表达式),第二个参数是拼接间隔符号,这里用的是逗号。
如果聚合的时候想按排序添加,可以在第二个参数后面空格再加上order by 语句。如下:
SELECT string_agg(cdate_tno, ',' order by cdate_tno)cdate_tno,arch_id FROM t_month_bill
GROUP BY arch_id
关于出现“,,,,,,,,,” 的问题
若聚合字段是空字符串时,聚合查询后会出现“,,,,,,,,”的字段的显示,这时就需要用case when将空字符串转为Null。
处理前

SELECT string_agg(case when cdate_tno!='' then cdate_tno else null end, ',' order by cdate_tno)cdate_tno,arch_id
FROM t_month_bill
GROUP BY arch_id
此处使用case when 将空字符串转为Null,处理后

本文介绍了如何使用SQL中的string_agg函数来实现数据表中某个字段按分组进行字符串拼接。通过示例展示了在不考虑空字符串时的简单使用,以及在处理空字符串时利用case when转换为空的情况,最终达到目标结果,即按arch_id分组,将cdate_tno字段的字符串累加并以逗号分隔。同时,还提到了如何在拼接时加入排序条件。

927

被折叠的 条评论
为什么被折叠?



