需要递归CTE SQL查询帮助

时间:2013-03-31 09:58:43

标签: sql-server sql-server-2012 common-table-expression recursive-query

我正在使用SQL Server 2012并且需要编写递归SQL查询来遍历层次结构(在同一个表上)以返回其元组上具有特定条件的父级。

我已经使用递归CTE设置了这个样本SQL Fiddle,但我现在已经在我脑海中了。

我需要的是能够返回第四列(ReportingLocationId int),该列被定义为具有IsReportingRollup bit集的层次结构中的父ID。

因此对于第1行,这将为null,对于第2,3和4行,这将设置为2.对于第5,6,7行,类似地将其设置为5.

1 个答案:

答案 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