2

以下に示す構造の組織名テーブルがあります。

CREATE TABLE [dbo].[DP_ORG_OrganizationUnit](
    [GID] [uniqueidentifier] NULL,
    [ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [Code] [nvarchar](100) NULL,
    [Name] [nvarchar](100) NULL,
    [LastUpdated] [datetime] NULL,
    [ManagedBy] [int] NULL, **SELF REFERENCING ID {For parent - child }***
    [Manager] [int] NULL,
 CONSTRAINT [PK_DP_ORG_OrganizationUnit] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

要件は、各組織単位の完全なパスを提供するビューを作成する必要があることです。

ID   CODE  NAME                    MANAGEDBY  MANAGER
1    HO    Head Office             0
2    IT    Information Technology  1
3.   FI    Finance                 1
4.   SP    IT Support              2
5.   M     Mergers                 3 

データが次のようになる必要があります

1. Head Office
2. Head Office/Information Technology
3. Head Office/Finance
4. Head Office/Information Technology/IT Support
5. Head Office/Finance/Mergers

これをレポートの基準フォームに直接取り込み、1 つの組み合わせからサブ部門を選択できるようにしたいと考えています。TSQL(ms sql 2005)からこれを取得するにはどうすればよいですか。解決策を事前に感謝します。

解決策 1:

with cteAnchor as (
 select ID,CAST(Name as nvarchar(500)) as Name
 from DP_ORG_OrganizationUnit
 where ManagedBy  = 21)
, cteRecursive as 
 (select ID,CAST(Name as nvarchar(500))as Name
  from cteAnchor
 union all 
 select t.ID,CAST( r.Name + ' / ' + t.Name AS nvarchar(500))
 from DP_ORG_OrganizationUnit t
 join cteRecursive r on t.ManagedBy = r.ID)
select * from cteRecursive;
4

1 に答える 1

5

共通テーブル式を使用した再帰クエリを参照してください。

with cteAnchor as (
 select Name, id
 from DP_ORG_OrganizationUnit
 where ManagedBy  = 0)
, cteRecursive as (
 select id, Name
  from cteAnchor
 union all 
 select t.id, r.Name + '/' + t.Name
 from DP_ORG_OrganizationUnit t
 join cteRecursive r on t.ManagedBy = r.id)
select * from cteRecursive;
于 2009-11-15T06:52:59.847 に答える