You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用查询将多行数据的ACCUM_PROVSN_TY字段值合并为单个字段

数据合并需求及实现方案

原始数据

ACCT_NUM    BEN_OPT_CD  BEN_PLN_TY  ACCUM_PROVSN_TY
0000025        CO1E     MHRD             2
0000025        CO1E     MHRD             3
0000025        CO1E     RXRD             1
0000025        CO1EF    MHRD             2
0000025        CO1EF    MHRD             3
0000025        CO1EF    RXRD             3
0000025        CO1EL    MHRD             1
0000025        CO1EL    MHRD             4
0000025        CO1EL    RXRD             3
0000025        CO1EN    MHRD             1
0000025        CO1EN    MHRD             2
0000025        CO1EN    MHRD             3
0000025        CO1EN    RXRD             3

目标结果

将同一ACCT_NUM、BEN_OPT_CD、BEN_PLN_TY分组下的ACCUM_PROVSN_TY值合并为逗号分隔的字符串,结果如下:

ACCT_NUM    BEN_OPT_CD  BEN_PLN_TY  ACCUM_PROVSN_TY
0000025        CO1E     MHRD             2, 3
0000025        CO1E     RXRD             1
0000025        CO1EF    MHRD             2, 3
0000025        CO1EF    RXRD             3
0000025        CO1EL    MHRD             1, 4
0000025        CO1EL    RXRD             3
0000025        CO1EN    MHRD             1, 2, 3
0000025        CO1EN    RXRD             3

注:表记录数不足50万,无需考虑性能问题;最终ACCUM_PROVSN_TY字段值最多包含4个数字。

不同数据库的实现代码

MySQL/MariaDB

使用GROUP_CONCAT函数,支持排序和自定义分隔符:

SELECT 
    ACCT_NUM,
    BEN_OPT_CD,
    BEN_PLN_TY,
    GROUP_CONCAT(ACCUM_PROVSN_TY ORDER BY ACCUM_PROVSN_TY SEPARATOR ', ') AS ACCUM_PROVSN_TY
FROM your_table
GROUP BY ACCT_NUM, BEN_OPT_CD, BEN_PLN_TY;

Oracle

使用LISTAGG函数实现字符串聚合:

SELECT 
    ACCT_NUM,
    BEN_OPT_CD,
    BEN_PLN_TY,
    LISTAGG(ACCUM_PROVSN_TY, ', ') WITHIN GROUP (ORDER BY ACCUM_PROVSN_TY) AS ACCUM_PROVSN_TY
FROM your_table
GROUP BY ACCT_NUM, BEN_OPT_CD, BEN_PLN_TY;

SQL Server(2017+)

使用STRING_AGG函数:

SELECT 
    ACCT_NUM,
    BEN_OPT_CD,
    BEN_PLN_TY,
    STRING_AGG(ACCUM_PROVSN_TY, ', ') WITHIN GROUP (ORDER BY ACCUM_PROVSN_TY) AS ACCUM_PROVSN_TY
FROM your_table
GROUP BY ACCT_NUM, BEN_OPT_CD, BEN_PLN_TY;

PostgreSQL

使用STRING_AGG函数,需将数值类型转为文本:

SELECT 
    ACCT_NUM,
    BEN_OPT_CD,
    BEN_PLN_TY,
    STRING_AGG(ACCUM_PROVSN_TY::TEXT, ', ') ORDER BY ACCUM_PROVSN_TY AS ACCUM_PROVSN_TY
FROM your_table
GROUP BY ACCT_NUM, BEN_OPT_CD, BEN_PLN_TY;

内容的提问来源于stack exchange,提问作者Johnny Bones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:08:11