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

如何基于GRP=3规则生成GRP_N_VO列并关联全量数据

解决GRP分组关联GRP_N_VO并生成重复行的SQL方案

现有数据表包含字段:

  • ID:同一ID可对应不同GRP和N_VO值
  • GRP:分组标识
  • N_VO:组成员身份阶段标识
  • DAT:组成员身份发生日期(与N_VO关联)

需求:

  1. 对GRP=3的行,按相同N_VO分组、DAT升序编号,生成GRP_N_VO字段(例如N_VO=3的两行对应3_1和3_2)
  2. 将所有GRP≠3的行通过N_VO关联到对应的GRP_N_VO分组,若同一N_VO对应多个GRP_N_VO,则生成重复行,最终得到全量数据结果

实现代码

WITH grp3_mapping AS (
    -- 生成GRP=3的行对应的GRP_N_VO映射关系
    SELECT 
        N_VO,
        DAT AS grp3_dat,
        CONCAT(N_VO, '_', ROW_NUMBER() OVER (PARTITION BY N_VO ORDER BY DAT ASC)) AS GRP_N_VO
    FROM your_table
    WHERE GRP = 3
)
-- 关联原表与映射表,输出最终结果
SELECT 
    t.ID,
    t.GRP,
    t.N_VO,
    t.DAT,
    m.GRP_N_VO
FROM your_table t
LEFT JOIN grp3_mapping m 
    ON t.N_VO = m.N_VO
    -- GRP=3的行需匹配自身日期,确保对应正确的GRP_N_VO
    AND (t.GRP != 3 OR t.DAT = m.grp3_dat)
ORDER BY t.ID, t.GRP, t.DAT, m.GRP_N_VO;

代码说明

  1. 映射表生成:grp3_mapping子查询专门处理GRP=3的行,通过ROW_NUMBER()窗口函数按N_VO分组、DAT升序生成编号,拼接成N_VO_编号格式的GRP_N_VO,同时保留GRP=3的日期用于后续精准匹配。
  2. 关联逻辑:
    • GRP≠3的行:仅通过N_VO关联映射表,同一N_VO对应多个GRP_N_VO时,自动生成重复行,满足分组关联需求。
    • GRP=3的行:额外通过日期匹配映射表的对应记录,确保自身的GRP_N_VO准确对应。
  3. 排序规则:按ID、GRP、DAT、GRP_N_VO排序,让结果更规整易读。

特殊情况处理

如果存在GRP≠3的行,其N_VO在GRP=3中无对应记录,这类行的GRP_N_VO会显示为NULL:

  • 若要过滤这类数据,可在查询末尾添加WHERE m.GRP_N_VO IS NOT NULL
  • 若要自定义填充值,可使用COALESCE(m.GRP_N_VO, '自定义内容')替换m.GRP_N_VO

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:23:19