日期:2014-05-17 浏览次数:20771 次
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([ID] [int],[Name] [nvarchar](10),[PID] [int])
INSERT INTO [tb]
SELECT '1','A','0' UNION ALL
SELECT '2','B','0' UNION ALL
SELECT '3','A1','1' UNION ALL
SELECT '4','B1','2' UNION ALL
SELECT '5','B2','2' UNION ALL
SELECT '6','A11','3' UNION ALL
SELECT '7','A12','3' UNION ALL
SELECT '8','A111','6' UNION ALL
SELECT '9','A112','6' UNION ALL
SELECT '10','A1111','8' UNION ALL
SELECT '11','A1112','8'
--1.2 SQL2005 指定某节点展开,并按节点深度排序:
--显示所有节点:
;WITH t AS
(
SELECT ID,lvl=0,px=CAST(ID AS VARBINARY)
FROM tb t
WHERE PID=0
UNION ALL
SELECT a.ID,lvl+1,CAST(px+CAST(a.ID AS VARBINARY) AS VARBINARY)
FROM tb a
JOIN t b
ON a.PID = b.ID
)
SELECT a.*,lvl
FROM tb a
JOIN t b
ON a.ID=b.ID
ORDER BY b.px
/*
ID Name PID lvl
----------- ---------- ----------- -----------
1 A 0 0
3 A1 1 1
6 A11 3 2
8 A111 6 3
10 A1111 8 4
11 A1112 8 4
9 A112 6 3
7 A12 3 2
2 B 0 0
4 B1 2 1
5 B2 2 1
(11 行受影响)
*/
------解决方案--------------------
你可以举个例子啊 比如你想要的结果为什么第一行是那个记录 第二行是那个记录 第三行是那个记录。。。 是怎么你说的递归的 一步一步数据理清楚
------解决方案--------------------
11楼正解。
------解决方案--------------------
http://blog.csdn.net/gyc1105/article/details/8069271
刚好前几天写了一个递归查询你可以参考下
------解决方案--------------------