我正在使用SQL Server 2012并且需要编写递归SQL查询来遍历层次结构(在同一个表上)以返回其元组上具有特定条件的父级。
我已经使用递归CTE设置了这个样本SQL Fiddle,但我现在已经在我脑海中了。
我需要的是能够返回第四列(ReportingLocationId int
),该列被定义为具有IsReportingRollup bit
集的层次结构中的父ID。
因此对于第1行,这将为null,对于第2,3和4行,这将设置为2.对于第5,6,7行,类似地将其设置为5.
答案 0 :(得分:3)
修改你提供的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