当前位置: 代码迷 >> Sql Server >> sql 查询结果排序有关问题,这种可否实现
  详细解决方案

sql 查询结果排序有关问题,这种可否实现

热度:87   发布时间:2016-04-27 13:11:14.0
sql 查询结果排序问题,这种可否实现?
数据库如下:
id pid name
1 0 AAA
2 0 BBB
3 1 CCC
4 1 DDD
5 2 EEE
6 2 FFF
7 2 GGG

想要得到的结果:
id pid name
1 0 AAA
3 1 CCC
4 1 DDD
2 0 BBB
5 2 EEE
6 2 FFF
7 2 GGG

就是说,pid为 n 的行 跟在 id 为 n 的行后面,
期待高手出现





------解决方案--------------------
SQL code
--测试数据DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))INSERT @t SELECT '001',NULL ,'山东省'UNION ALL SELECT '002','001','烟台市'UNION ALL SELECT '004','002','招远市'UNION ALL SELECT '003','001','青岛市'UNION ALL SELECT '005',NULL ,'四会市'UNION ALL SELECT '006','005','清远市'UNION ALL SELECT '007','006','小分市'--深度排序显示处理--生成每个节点的编码累计(相同当单编号法的编码)DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))DECLARE @Level intSET @Level=0INSERT @t_Level SELECT ID,@Level,IDFROM @tWHERE PID IS NULLWHILE @@ROWCOUNT>0BEGIN    SET @[email protected]+1    INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID    FROM @t a,@t_Level b    WHERE a.PID=b.ID        AND [email protected]END--显示结果SELECT SPACE(b.Level*2)+'|--'+a.NameFROM @t a,@t_Level bWHERE a.ID=b.IDORDER BY b.Sort/*--结果|--山东省  |--烟台市    |--招远市  |--青岛市|--四会市  |--清远市    |--小分市--*/
------解决方案--------------------
SQL code
Declare @T Table (    id    Int,    pid    Int,    name    varchar(20))Insert Into @TSelect 1,    0,    'AAA'Union Select 2,    0,    'BBB'Union Select 3,    1,    'CCC'Union Select 4,    1,    'DDD'Union Select 5,    2,    'EEE'Union Select 6,    2,    'FFF'Union Select 7,    2,    'GGG'Select * From @TOrder By case when Pid=0 then id else pid End,id
  相关解决方案