日期:2014-05-17 浏览次数:20648 次
--> 生成测试数据表: [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
刚好前几天写了一个递归查询你可以参考下
------解决方案--------------------