1. 程式人生 > >求某個節點下所有的子節點,但要求保留原節點名稱

求某個節點下所有的子節點,但要求保留原節點名稱

USE tempdb
GO
--測試資料
if not object_id(N'Employee') is null
    drop table Employee
Go
Create table Employee([EId] nvarchar(23),[Name] nvarchar(23),[Sex] nvarchar(21),[Depart] int)
Insert Employee
select N'001',N'臧三',N'男',103 union all
select N'002',N'雄起',N'男',103 union all
select N'003',N'冠益乳',N'女',103 union all
select N'004',N'但是',N'男',104 union all
select N'005',N'熱風',N'男',104 union all
select N'006',N'褲腳',N'男',105 union all
select N'007',N'是多少',N'女',105 union all
select N'008',N'出納',N'女',106 union all
select N'009',N'刪除',N'男',107 union all
select N'010',N'但是',N'男',107
GO
if not object_id(N'Orgnazation') is null
    drop table Orgnazation
Go
Create table Orgnazation([Id] int,[OrgName] nvarchar(24),[ParentId] int)
Insert Orgnazation
select 100,N'M公司',null union all
select 101,N'管理中心',100 union all
select 102,N'業務中心',100 union all
select 103,N'財務部',100 union all
select 104,N'人事部',101 union all
select 105,N'技術部',101 union all
select 106,N'銷售1部',102 union all
select 107,N'銷售2部',102
Go
--測試資料結束
;
WITH cte AS (
    SELECT Orgnazation.ID,
           Orgnazation.ID AS OID
    FROM   Orgnazation WHERE id=100
    UNION ALL
    SELECT Orgnazation.ID,
           OID
    FROM   dbo.Orgnazation
        JOIN cte
                ON  cte.ID = Orgnazation.ParentId
)
SELECT * FROM cte