0

私は SQL Server 2012 を使用しており、タプルに特定の条件を持つ親を返すために、再帰的な SQL クエリを作成して (同じテーブルで) 階層を遡る必要があります。

このサンプルSQL Fiddleを再帰 CTE でセットアップしましたが、頭がいっぱいです。

ReportingLocationId int必要なのは、セットを持つ階層の親 ID として定義されている 4 番目の列 ( ) を返せるようにすることIsReportingRollup bitです。

したがって、行 1 の場合、これは null になり、行 2、3、および 4 の場合、これは 2 として設定されます。同様に、行 5、6、7 の場合、これは 5 として設定されます。

4

1 に答える 1

3

提供された SQL Fiddle を変更すると、次のようになりました。

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
于 2013-03-31T14:23:00.413 に答える