日期:2014-05-17  浏览次数:20648 次

高手才会写的查询语句!!!
表数据:
ID,Name,Sort,parentID
1,系统管理,1,0
2,会员管理,2,0
3,基本设置,1,1
4,系统操作,2,1
5,省份管理,1,3
6,城市管理,2,3
7,操作日志,1,4
8,错误日志,2,4
9,普通会员,1,2
10,高级会员,2,2
11,会员资料,1,9


想要的结果:
ID,Name,Sort,parentID
1,系统管理,1,0
3,基本设置,1,1
5,省份管理,1,3
6,城市管理,2,3
4,系统操作,2,1
7,操作日志,1,4
8,错误日志,2,4
2,会员管理,2,0
9,普通会员,1,2
11,会员资料,1,9
10,高级会员,2,2


鄙人不才,除了在程序做出那种效果外,在sql通过sql语句怎么也查不出那种效果。故请教网络高手给出方案。让小弟我以及能看到此贴也遇到类似查询功能的朋友借鉴、学习!谢谢!

------解决方案--------------------
不是高手,真没看出你的这个想要的结果 是什么规律
------解决方案--------------------
毛线规律啊
------解决方案--------------------
.....这是智商题吗?都不说说你的规律,或者你程序怎么实现的?
------解决方案--------------------
这个排序我没有能总结出来规则,你把规则说一下。
------解决方案--------------------
规则都 不说清楚,,,提的问题,个人表示 无法理解 。
------解决方案--------------------
SQL code

--> 生成测试数据表: [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
刚好前几天写了一个递归查询你可以参考下
------解决方案--------------------
探讨
11楼正解。