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

如何按特定条件合并SQL表中B与BC记录的co列数据

解决方案:合并B与BC记录的SQL实现

针对你给出的表结构和需求,我们可以通过窗口函数来识别同一日期(cd)下的B和BC记录,然后按规则合并字段。以下是具体的SQL代码和解释:

实现代码

SELECT
    CASE WHEN has_bc THEN b_id ELSE id END AS id,
    cd,
    CASE WHEN has_bc THEN b_ct ELSE ct END AS ct,
    CASE WHEN has_bc THEN 'B,BC' ELSE co END AS co
FROM (
    SELECT
        t.*,
        -- 获取同一cd下B记录的id
        MAX(CASE WHEN co = 'B' THEN id END) OVER (PARTITION BY cd) AS b_id,
        -- 获取同一cd下B记录的ct值
        MAX(CASE WHEN co = 'B' THEN ct END) OVER (PARTITION BY cd) AS b_ct,
        -- 标记同一cd下是否存在BC记录
        BOOL_OR(co = 'BC') OVER (PARTITION BY cd) AS has_bc,
        -- 标记同一cd下是否存在B记录
        BOOL_OR(co = 'B') OVER (PARTITION BY cd) AS has_b
    FROM table1 t
) sub
-- 过滤掉:当同一cd下存在B记录时的BC原记录
WHERE NOT (co = 'BC' AND has_b);

代码解释

  1. 子查询部分:
    • 使用窗口函数PARTITION BY cd按日期分组,识别每组内的B记录信息(b_id、b_ct)。
    • 通过BOOL_OR函数标记每组内是否同时存在B和BC记录。
  2. 外层查询:
    • 当同一日期下同时存在B和BC时,用B记录的id和ct,并将co合并为B,BC。
    • 过滤掉重复的BC记录(当同一日期已有B记录时,不再保留原BC记录)。
    • 对于仅存在B或仅存在BC的记录,直接保留原字段值。

执行结果

运行上述代码后,将得到如下结果:

idcdctco
01/1/201812:00:00B,BC
21/12/201812:00:00B
31/22/201812:00:00BC

这个结果完全符合你的需求:合并了同一日期下的B和BC记录,使用B记录的对应字段值,同时保留了无匹配项的单独记录。

内容的提问来源于stack exchange,提问作者Ms workaholic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:16:18