首页 新闻 会员 周边 捐助

问一个sql语句

0
悬赏园豆:5 [已解决问题] 解决于 2013-04-26 11:03

有一个表

id,  name,  parentid

1     A         0

2     B         0

3     A1       1

4     A2       1

5     B1       2

6     C1       1

 

如何实现下面的效果:

A

 A1

 A2

 C1

B

 B1

问题补充:

例子引起误解了,是树查询,不是单纯的order by能实现的

szny的主页 szny | 初学一级 | 园豆:60
提问于:2013-04-18 17:08
< >
分享
最佳答案
0
DECLARE @t TABLE(id INT ,NAME VARCHAR(10),parentid INT);

INSERT INTO @t (id,name,parentid)VALUES 
(1,'A',0)
,(2,'B',0)
,(3,'A1',1)
,(4,'A2',1)
,(5,'B1',2)
,(6,'C1',1)

;WITH cte AS (
    SELECT *,1 AS l,rn=ROW_NUMBER() OVER(ORDER BY id) FROM @t WHERE parentid=0 
    UNION ALL 
    SELECT a.*,b.l+1,rn=b.rn*10+ROW_NUMBER() OVER(ORDER BY a.id) FROM @t a JOIN cte b ON a.parentid=b.id
)
SELECT id,REPLICATE('-',l)+name AS name FROM cte ORDER BY CAST(rn AS varchar(1000));

/*
id          name
----------- ---------
1           -A
3           --A1
4           --A2
6           --C1
2           -B
5           --B1

*/


 

收获园豆:3
gw2010 | 小虾三级 |园豆:1487 | 2013-04-19 09:57
其他回答(2)
0

name order by 用这个字段排序试试。

收获园豆:1
悟行 | 园豆:12559 (专家六级) | 2013-04-18 17:11
0

有点儿类似Oracle的树形查询,你搜一下有没有sql server的

收获园豆:1
不负春光,努力生长 | 园豆:1382 (小虾三级) | 2013-04-18 20:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册