递归CTE - 有限的行数

时间:2010-10-18 13:51:56

标签: sql parent children recursive-query

我正在尝试在一个非常简单的表(组织)上创建查询

我有专栏

Organisation, Manager, Superior_Organisation
CEO
Leadership Team, David, CEO 
Production Management, Alex, Leadership Team
Production Site 1, Francoise, Production Management
Production Site 2, Steve, Production Management
Production Site 1 Maintenance, Alan, Production Site 1

...

由于级别不同,我不知道如何创建一个查询,从一个特定的级别开始为我提供所有优秀的组织

我试过这段代码

declare @i int
select @i = 0
-- keep going until no more rows added
while @@rowcount > 0
begin
select @i = @i + 1
-- Get all children of previous level
SELECT     organisations.Organisation, organisations.Manager,  
organisations.Superior_Organisation
FROM         organisations 
end

但是通过这个查询,我得到了所有,我不知道,我怎么只能查询上级组织,例如用于生产现场1维护。 (可以是1或最多5)

一种方式可能是加入桌面,但我认为,这远远没有表现出来。

我看过一些递归的CTE查询,但我不熟悉。非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

;WITH organisations AS
(
SELECT 'CEO' AS Organisation, cast(NULL as varchar(50)) AS Manager, cast(NULL as varchar(50)) AS Superior_Organisation UNION ALL
SELECT 'Leadership Team', 'David', 'CEO'  UNION ALL
SELECT 'Production Management', 'Alex', 'Leadership Team' UNION ALL
SELECT 'Production Site 1', 'Francoise', 'Production Management' UNION ALL
SELECT 'Production Site 2', 'Steve', 'Production Management' UNION ALL
SELECT 'Production Site 1 Maintenance', 'Alan', 'Production Site 1'
),
cte As (
SELECT Organisation, Manager, Superior_Organisation
FROM         organisations 
WHERE organisations.Organisation = 'Production Site 1 Maintenance'
UNION ALL
SELECT o.Organisation, o.Manager, o.Superior_Organisation
FROM         organisations o
JOIN cte ON cte.Superior_Organisation = o.Organisation
)
SELECT Organisation, Manager, Superior_Organisation
FROM cte
WHERE Organisation <> 'Production Site 1 Maintenance'