首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

排序有关问题,求教达人

2012-02-08 
排序问题,求教达人!表departmentlclass内有idparentid,nameorderid10部门121人事231技术141管理352出纳162

排序问题,求教达人!
表departmentlclass内有
id   parentid,name   orderid
1             0         部门     1
2             1         人事     2
3             1         技术     1
4             1         管理     3
5             2         出纳     1
6             2         会计     2
7             3         一部     1
8             3         二部     2
9             4         老总     1
我想要的结果是,按orderid排序读出各部门和各部门下面的结构顺序是   部门1紧接着是部门1下面的结构按orderid排序,然后读出部门2和部门2下面的结构按orderid排序,依次类推,,有达人帮忙解决万分感谢,,提示亦可


[解决办法]
参看邹建的

--测试数据
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 int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END

--显示结果
SELECT SPACE(b.Level*2)+ '|-- '+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/

热点排行