簡體   English   中英

獲取父子記錄SQL Server 2008

[英]Get Parent Child records sql server 2008

我有如下的COMPANY表

 CompanyID  CompanyName

 1           xyz
 2           xyz-c
 3           xyz-c1
 4           xyz-c2
 5           xyz-c-c
 6           xyz-c-c1
 7           xyz-c-c2
 8           xyz-c-c1-c
 9           xyz-c-c1-c1
10           xyz-c-c1-c2 

我有一個如下的COMPANYMAPPING表

 CompanyMapID   ParentCompanyID ChildCompanyID
  1                 1               2               
  2                 1               3               
  3                 1               4               
  4                 2               5               
  5                 2               6               
  6                 2               7               
  7                 6               8               
  8                 6               9               
  9                 6               10              
 10                 11              12  

我想通過使用上面的2個表來獲取每個公司的子公司記錄,恰好我想得到如下的結果

 CompanyID   CompanyName         Level
 1               xyz              0
 2               xyz-c            1
 3               xyz-c1           1
 4               xyz-c2           1
 5               xyz-c-c          2
 6               xyz-c-c1         2
 7               xyz-c-c2         2
 8               xyz-c-c1-c       3
 9               xyz-c-c1-c1      3
10               xyz-c-c1-c2      3

我經歷了一些遞歸CTE的問題,但不適合這樣做,我有多組父子記錄(多個級別),因此我需要查詢才能按順序提取所有記錄

with cte as (
    select C.CompanyID, 0 as Level
    from COMPANY as C
    where C.CompanyID not in (select T.ChildCompanyID from COMPANYMAPPING as T)

    union all

    select C.ChildCompanyID as CompanyID, A.Level + 1 as Level
    from cte as A
        inner join COMPANYMAPPING as C on C.ParentCompanyID = A.CompanyID
)
select
    C.CompanyID, C.CompanyName, A.Level
from cte as A
    inner join COMPANY as C on C.CompanyID = A.CompanyID

sql小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM