有一个表
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能实现的
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 */
name order by 用这个字段排序试试。
有点儿类似Oracle的树形查询,你搜一下有没有sql server的