0

我正在使用SQL Server 2012,並且需要編寫一個遞歸SQL查詢來遍歷層次結構(在同一張表上)以返回其元組上具有特定條件的父項。需要遞歸CTE SQL查詢幫助

我已經用遞歸CTE設置了這個樣本SQL Fiddle,但我現在頭腦不清。

我需要的是能夠返回第四列(ReportingLocationId int),它被定義爲具有IsReportingRollup bit集合的層次結構中的父級ID。

因此,對於第1行,這將是零,而對於行2,3和4,這將類似地,對於行5,6,7,這將被設置爲5。

回答

3

修改您的設置被設置爲2。 SQL小提琴,我想出了:

WITH hierarchy AS (
    SELECT t.Id, 
     t.Name, 
     t.ParentId, 
     CAST(NULL AS nvarchar(100)) AS parentname, 
     case when t.IsReportingRollup = 1 then t.Id 
       else null 
     end as ReportingLocationId 
    FROM Location t 
    WHERE t.ParentId IS NULL 
    UNION ALL 
    SELECT x.Id, 
     x.Name, 
     x.ParentId, 
     y.Name, 
     case when y.ReportingLocationId is not null then y.ReportingLocationId 
       when x.IsReportingRollup = 1 then x.Id 
       else null 
     end 
    FROM Location x 
    JOIN hierarchy y ON y.Id = x.ParentID) 
SELECT s.Id, 
     s.Name, 
     s.parentname, 
     s.ReportingLocationId 
    FROM hierarchy s 
+0

不錯,謝謝本 – Boycs