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

Oracle根据CSF列规则分组拼接Data列值的SQL查询方法

Oracle按CSF标记分组拼接Data字段实现方案

问题场景

Oracle数据库中存在一张业务表,包含CSF、ID、seqNum、Data、rs_id五个字段,样例数据如下:

CSFIDseqNumDatars_id
1141761591ABC0x000055.0001882a.017c
1141761602DEF0x000055.0001882c.0010
1141761613GHI0x000055.0001882d.00ac
1141761624JKL0x000055.0001882d.0164
0141761635MNO0x000055.0001882f.001c
0141761631ABC0x000055.0001882f.00d4
1141761641ABC0x000055.00018830.0144
1141761652DEF0x000055.00018831.0010
1141761663GHI0x000055.00018832.00e4
1141761664JKL0x000055.00018832.019c
0141761675MNO0x000055.00018834.001c

需要编写SELECT语句得到如下查询结果:

CSFIDseqNumDatars_id
0141761595ABCDEFGHIJKLMNO0x000055.0001882f.001c
0141761631ABC0x000055.0001882f.00d4
0141761645ABCDEFGHIJKLMNO0x000055.00018834.001c

业务规则

查询逻辑需要满足以下要求:

  • 遍历记录过程中,遇到CSF=1的记录需持续拼接其Data列值,直到遇到CSF=0的记录时结束该组拼接
  • 结果行的ID取值为每组内第一条CSF=1的记录对应的ID值
  • 结果行的seqNum、rs_id取值为每组内CSF=0的记录对应字段值
  • 无前置CSF=1记录的独立CSF=0记录直接作为结果行返回,所有结果行的CSF值统一为0

核心逻辑:CSF=1标识当前记录的Data列需要和后续同组记录拼接,CSF=0标识当前记录为分组结束节点,对应Data为拼接的最后一段,无需继续拆分。

实现方案

通过窗口函数给每条记录分配分组标识,再按组聚合即可实现需求,SQL语句如下:

WITH group_mark AS (
    SELECT 
        t.*,
        -- 累计当前行之前(含当前行)CSF=0的数量作为分组ID,同一拼接组的ID相同
        COUNT(CASE WHEN CSF = 0 THEN 1 END) OVER (
            ORDER BY ID, seqNum 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS gid,
        -- 取当前组第一条记录的ID
        FIRST_VALUE(ID) OVER (PARTITION BY gid ORDER BY ID, seqNum) AS group_first_id
    FROM 替换为你的实际业务表名 t
)
SELECT
    0 AS CSF,
    group_first_id AS ID,
    MAX(CASE WHEN CSF = 0 THEN seqNum END) AS seqNum,
    LISTAGG(Data, '') WITHIN GROUP (ORDER BY ID, seqNum) AS Data,
    MAX(CASE WHEN CSF = 0 THEN rs_id END) AS rs_id
FROM group_mark
GROUP BY gid, group_first_id
ORDER BY gid;

逻辑说明

  • 分组规则:每遇到一个CSF=0的结束节点,后续记录的分组ID自动加1,刚好把两个结束节点之间的连续CSF=1记录和后面的结束节点分到同一组
  • 独立CSF=0记录会单独成组,组首ID就是自身ID,拼接时仅保留自身Data,符合规则要求
  • 聚合阶段用LISTAGG按遍历顺序拼接同组所有Data,提取结束节点的seqNum、rs_id,固定输出CSF=0即可。如果实际业务的遍历顺序不是按ID,seqNum排序,替换ORDER BY后的字段即可。

内容的提问来源于stack exchange,提问作者Paritosh Shrivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:30:49