sql 2005 递归 查询部门所有子部门 with关键字

本文介绍使用SQL Server 2005中的WITH递归查询功能来获取指定部门及其所有子部门的方法,并提供了一个示例,展示如何通过递归联合查询实现部门层级的展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前些日子要查询查询部门所有子部门


上网搜索了一下,方法有

(1)、sql 2005的数据库欧!!2000不支持的

with SUBdeptName(DEPT_ID,DEPT_NAME)
as
(
 SELECT
 DEPT_ID,
 DEPT_NAME
 FROM dbo.DEPARTMENTInfo
 WHERE DEPT_ID=1
)
 UNION ALL

 SELECT
 DEPT_ID
 ,DEPT_NAME
 FROM dbo.DEPARTMENTInfo
INNER JOIN SUBdeptName
 ON DEPARTMENTInfo.SUPERIOR_DEPT=SUBdeptName.DEPT_ID
)


(2)、测试数据--可直接运行

SELECT * INTO t --载入测试数据
FROM
(
    SELECT 1 AS ID,'food' AS Product,0 AS ParentID UNION ALL
    SELECT 2,'sport',0 UNION ALL
    SELECT 3,'drink',1 UNION ALL
    SELECT 4,'ball',2 UNION ALL
    SELECT 5,'fruit',1 UNION ALL
    SELECT 6,'apple',5 UNION ALL
    SELECT 7,'banana',5 UNION ALL
    SELECT 8,'football',4 UNION ALL
    SELECT 9,'basketball',4 UNION ALL
    SELECT 10,'peisi',3 UNION ALL
    SELECT 11,'wohaha',3
) AS a

SELECT * FROM T
GO
WITH ShowTree(ID,Product,ORDERBY) AS
(
    SELECT ID,Product,ID FROM t WHERE ParentID=0 --固定成员
   
    UNION ALL
    SELECT t.ID,t.Product,ORDERBY*100+t.ID FROM ShowTree AS s
    INNER JOIN t ON s.ID = t.ParentID
)
SELECT * FROM ShowTree ORDER BY CAST(ORDERBY AS VARCHAR(50))--OPTION(MAXRECURSION 1)

DROP TABLE t 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值