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

如何用SQL获取所有记录的Root Source(根来源)

查询证书链的根来源(Root Source)

针对层级不固定(3条或10条记录)导致Lead/Lag函数失效的问题,**递归CTE(公共表表达式)**是最适配的解决方案,它能遍历任意深度的证书关联链,准确获取每条记录的根来源。

表结构回顾

CustIDCertNoOldCertNoSourceRoot Source
CU1C1DigitalDigital
CU1C2C1NONDigital
CU1C3C2NONDigital

解决方案SQL代码

WITH RecursiveCert AS (
    -- 锚点查询:定位所有根证书(无旧证书的记录)
    SELECT 
        CustID,
        CertNo,
        OldCertNo,
        Source,
        Source AS RootSource
    FROM YourTableName
    WHERE OldCertNo IS NULL OR OldCertNo = ''

    UNION ALL

    -- 递归查询:关联子证书,继承根来源
    SELECT 
        c.CustID,
        c.CertNo,
        c.OldCertNo,
        c.Source,
        rc.RootSource
    FROM YourTableName c
    INNER JOIN RecursiveCert rc 
        ON c.OldCertNo = rc.CertNo
)
-- 输出所有记录的根来源
SELECT 
    CustID,
    CertNo,
    OldCertNo,
    Source,
    RootSource AS [Root Source]
FROM RecursiveCert
ORDER BY CustID, CertNo;

代码逻辑说明

  1. 锚点成员:筛选出所有没有父证书(OldCertNo为空或空字符串)的记录,这些记录的RootSource就是自身的Source。
  2. 递归成员:将每一条子证书(OldCertNo关联父证书的CertNo)与递归CTE中的父记录关联,直接继承父记录的RootSource,以此类推遍历完整证书链。
  3. 最终查询:从递归CTE中取出所有记录,即可得到每条记录对应的根来源,不受层级数量限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:04