从表中获取根记录源

问题描述 投票:0回答:1

我需要使用 SQL 找到所有记录的根源。下面是表格结构和示例。

客户编号 证书号 OldCertNo 来源 根源
CU1 C1 数字 数字
CU1 C2 C1 数字
CU1 C3 C2 数字

超前和滞后将无法提供正确的详细信息,因为对于 1 个用户可以有 3 条记录,对于其他用户可以有 10 条记录。

sql sql-server hierarchical-data recursive-query
1个回答
1
投票

您可以使用递归 CTE 获取根证书:

WITH data AS (
SELECT  *
FROM
(
    VALUES  (N'CU1', N'C1', N'', N'Digital')
    ,   (N'CU1', N'C2', N'C1', N'NON')
    ,   (N'CU1', N'C3', N'C2', N'NON')
    ,   (N'CU1', N'C4', N'C3', N'Bzz')
) t (CustID,CertNo,OldCertNo,Source)
)
, rootdata AS (
SELECT  custid, certno AS root, certno,  source, source AS rootsource
FROM    data
WHERE   oldcertno = '' -- start at the root
UNION ALL
SELECT  c.custid, c.certno AS root, c2.certno, c2.source, c.rootsource -- forward original root source cert
FROM    rootdata c
INNER JOIN data c2
 ON c2.custid = c.custid
 AND    c2.oldcertno = c.certno -- join on parent cert
 )
 SELECT *
 FROM   rootdata
option(maxrecursion 0)

这会将根证书源转发给每个子证书。

© www.soinside.com 2019 - 2024. All rights reserved.