SQL SERVER中层次查询的问题

dondi 2007-04-29 05:53:30
比如说表 TB 中现在有三个字段:id,name,pid,(pid是它上一级的id)
id,name,pid
1,中国,null
2,北京,1
3,上海,1
4,海淀,2
5,西城,2
6,美国,null
7,纽约,6
8,休斯顿,6

希望得到这样查询结果(以便继续使用):
1,中国,null
2,北京,1
4,海淀,2
5,西城,2
3,上海,1
6,美国,null
7,纽约,6
8,休斯顿,6

这样的SQL SERVER语句该怎么写啊?在ORCAL中用start with...connect by可以很容易做到的。
...全文
294 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dondi 2007-04-29
  • 打赏
  • 举报
回复
恩 好 思路真清晰 谢谢
正牌风哥 2007-04-29
  • 打赏
  • 举报
回复

--测试数据
DECLARE @ta TABLE(ID char(3),Name nvarchar(10),PID char(3))
insert @ta select 1,'中国',null
insert @ta select 2,'北京',1
insert @ta select 3,'上海',1
insert @ta select 4,'海淀',2
insert @ta select 5,'西城',2
insert @ta select 6,'美国',null
insert @ta select 7,'纽约',6
insert @ta select 8,'休斯顿',6
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
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 @ta
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @ta a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END

--显示结果
SELECT a.*
FROM @ta a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort

ID Name PID
---- ---------- ----
1 中国 NULL
2 北京 1
4 海淀 2
5 西城 2
3 上海 1
6 美国 NULL
7 纽约 6
8 休斯顿 6

(8 行受影响)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧