sql如何实现查询结果中再分类排序啊求大神们帮助,
sql怎么实现查询结果中再分类排序啊,求大神们帮助,急啊。。。。。
功能大概是这样的,parent_id 记录着和当前记录有关联的数据的id。怎么实现啊?初学sql困扰死了
在线等!!!
id name … parent_id
1 w … null
3 d … null
5 d … 1
6 f … 3
7 f … 1
8 g … null
9 g … null
查询后结果:
id name … parent_id
1 w … null
5 d … 1
7 f … 1
3 d … null
6 f … 3
8 g … null
9 g … null
------解决方案--------------------
------解决方案--------------------
如果层级关系只有2层,可以用这个:
------解决方案--------------------
功能大概是这样的,parent_id 记录着和当前记录有关联的数据的id。怎么实现啊?初学sql困扰死了
在线等!!!
id name … parent_id
1 w … null
3 d … null
5 d … 1
6 f … 3
7 f … 1
8 g … null
9 g … null
查询后结果:
id name … parent_id
1 w … null
5 d … 1
7 f … 1
3 d … null
6 f … 3
8 g … null
9 g … null
------解决方案--------------------
if object_id('tempdb..#tb') is not null drop table #tb
go
create table #tb(id int,[name] varchar(3),parent_id varchar(3))
insert #tb
select 1,'w',null union all
select 3,'d',null union all
select 5,'d',1 union all
select 6,'f',3 union all
select 7,'f',1 union all
select 8,'g',null union all
select 9,'g',null
;with cte as(
select *,sort=Convert(varchar(10),id) from #tb where parent_id is null
union all
select a.* ,sort=Convert(varchar(10),b.sort+Convert(varchar(10),a.id)) from #tb a,cte b where b.id=a.parent_id
)
select id,name,parent_id from cte order by sort
--查询结果如下
/*
id name parent_id
----------- ---- ---------
1 w NULL
5 d 1
7 f 1
3 d NULL
6 f 3
8 g NULL
9 g NULL
*/
------解决方案--------------------
如果层级关系只有2层,可以用这个:
if object_id('tempdb..#tb') is not null drop table #tb
go
create table #tb(id int,[name] varchar(3),parent_id varchar(3))
insert #tb
select 1,'w',null union all
select 3,'d',null union all
select 5,'d',1 union all
select 6,'f',3 union all
select 7,'f',1 union all
select 8,'g',null union all
select 9,'g',null
select id,name,parent_id
from #tb
order by case when parent_id is null then id else parent_id end,id
/*
id name parent_id
1 w NULL
5 d 1
7 f 1
3 d NULL
6 f 3
8 g NULL
9 g NULL
*/
------解决方案--------------------
create table nay
(id int,name varchar(10),parent_id int)
insert into nay
select 1,'w',null union all
select 3,'d',null union all
select 5,'d',1 union all
select 6,'f',3 union all
select 7,'f',1 union all
select 8,'g',null union all
select 9,'g',null
select *
from nay
order by isnull(parent_id,id),parent_id
/*
id name parent_id
----------- ---------- -----------
1 w NULL
5 d 1
7 f 1
3 d NULL
6 f 3
8 g NULL
9 g NULL
(7 row(s) affected)
*/