前些日子要查询查询部门所有子部门
上网搜索了一下,方法有
(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