-------再求一sql语句-----------------

-Tracy-McGrady- 2016-09-02 03:28:03

有一表如下
select 1 id,0 pid union
select 2 id,0 pid union
select 3 id,1 pid union
select 4 id,1 pid union
select 5 id,2 pid union
select 6 id,2 pid union
select 7 id,3 pid
想得到如下的查询结果,
id pid mb
1 0 0_1
2 0 0_2
3 1 0_1_3
4 1 0_1_4
5 2 0_2_5
6 2 0_2_6
7 3 0_1_3_7
其中pid上上级目录的id

谢谢

...全文
100 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-09-02
  • 打赏
  • 举报
回复
;WITH CTET1
AS
(
select 1 id,0 pid  union
select 2 id,0 pid  union
select 3 id,1 pid  union
select 4 id,1 pid  union
select 5 id,2 pid  union
select 6 id,2 pid  union
select 7 id,3 pid 
),CTET2
AS
(
SELECT *,CAST(RTRIM(pid)+'_'+RTRIM(id) AS VARCHAR(100)) AS Path1 FROM CTET1 WHERE CTET1.pid=0
UNION ALL
SELECT b.*,CAST(a.Path1+'_'+RTRIM(b.id) AS VARCHAR(100)) FROM CTET2 AS a INNER JOIN CTET1 AS b ON b.pid=a.id
)
SELECT * FROM CTET2 ORDER BY id
/*
id	pid	Path1
1	0	0_1
2	0	0_2
3	1	0_1_3
4	1	0_1_4
5	2	0_2_5
6	2	0_2_6
7	3	0_1_3_7
*/

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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