请教一个sql语句

qg1977 2017-01-23 05:34:29
有如下一个表:

名称是为了方便理解写的,实际不会这么有规律性

如何生成以下的一个视图:


谢谢!
...全文
425 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
0与1之间 2017-01-24
  • 打赏
  • 举报
回复
应该是递归吧

With T1(ID,PID,Name) As
(
	Select 1,0,'1' Union All
	Select 2,0,'2' Union All	
	Select 3,0,'3' Union All
	Select 4,1,'1-1' Union All
	Select 5,1,'1-2' Union All
	Select 6,4,'1-1-1' Union All
	Select 7,4,'1-1-2' Union All
	Select 8,2,'2-1' Union All
	Select 9,3,'3-1'
),T2 As
(
	Select *,0 As Lev from T1 where PID=0 Union All
	Select a.*,Lev+1 from T1 a Cross Apply T2 b where a.PID=b.ID
)
Select * from  T2
RINK_1 2017-01-23
  • 打赏
  • 举报
回复
WITH CTE1 AS (SELECT *,0 AS 级数 FROM TABLE WHERE 上级ID=0 UNION ALL SELECT A.*,B.级数+1 FROM TABLE A JOIN CTE1 B ON A.上级ID=B.ID) SELECT * FROM CTE1 ORDER BY ID
  • 打赏
  • 举报
回复
1楼的方法可以啊 反正你只要计算层数
qg1977 2017-01-23
  • 打赏
  • 举报
回复
报歉,没说明白

就是这样一个树状表

其中“上级ID”就是其对应上一级的ID,比如“1-1”的上一级是“1”,则“上级ID”为1,“2-1”的上一 级是“2”,则“上级ID”为“2”,“1-1-2”的上一级是“1-1”,则对应的“上级ID”为“4”。
就是想生成一个视图,可以直观的看到每一对应在哪一级。
谢谢
二月十六 版主 2017-01-23
  • 打赏
  • 举报
回复
啥规则啊?猜了一个规则:
with taba (ID,上级ID,名称)
as
(
select 1,0,'1' union all
select 2,0,'2' union all
select 3,0,'3' union all
select 4,1,'1-1' union all
select 5,1,'1-2' union all
select 6,4,'1-1-1' union all
select 7,4,'1-1-2' union all
select 8,2,'2-1' union all
select 9,3,'3-1'
)

SELECT *,len(名称)-len(replace(名称,'-','')) AS '级数'
FROM taba



效果:

34,594

社区成员

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

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