ORACLESQL问题,层次递归问题

1.PNG

需要按照姓名进行LEVEL排序,显示如图的结果,请问如何写SQL 代码

SQL 用户Z0305596 发布于 2023-7-14 14:51
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
YmengLv5中级互助
发布于2023-7-14 16:25

例如:测试表test_ym ,表字段有name,c_start,c_end

sql代码:   

WITH TEMP(NAME,C_START,C_END,C_RANK) AS (

SELECT NAME,C_START,C_END,1 

FROM TEST_YM 

WHERE C_START='START'

UNION ALL 

SELECT A.NAME,A.C_START,A.C_END,B.C_RANK+1  

FROM TEST_YM A,TEMP B 

WHERE A.C_START=B.C_END AND A.NAME=B.NAME

)

SELECT NAME,C_START,C_END,C_RANK 

FROM TEMP

ORDER BY NAME,C_RANK

结果:

image.png

sql代码里的test_ym表替换成你的表,c_start替换成fromnode,c_end替换成tonode,其他不用改

  • 用户Z0305596 用户Z0305596(提问者) C_RANK是从哪出来的
    2023-07-20 09:47 
  • Ymeng Ymeng 回复 用户Z0305596(提问者) temp中间表自己定义的排名字段,这个不用管,直接照写就行
    2023-07-20 09:50 
  • 用户Z0305596 用户Z0305596(提问者) 回复 Ymeng 我替换了,但是显示无效字符 WITH TEMP(NAME,FROMNODE,TONODE,C_RANK) AS ( SELECT NAME,FROMNODE,TONODE,1  FROM TBLPRDOPBUSINESSRULERELATION  WHERE FROMNODE=\'START\' UNION ALL  SELECT A.NAME,A.FROMNODE,A.TONODE,B.C_RANK+1   FROM TBLPRDOPBUSINESSRULERELATION A,TEMP B  WHERE A.FROMNODE=B.TONODE AND A.NAME=B.NAME ) SELECT NAME,FROMNODE,TONODE,C_RANK  FROM TEMP ORDER BY NAME,C_RANK
    2023-07-20 10:06 
  • Ymeng Ymeng 回复 用户Z0305596(提问者) 知道是具体哪个位置报错吗,看sql没有问题
    2023-07-20 10:23 
  • 用户Z0305596 用户Z0305596(提问者) 回复 Ymeng 数据集配置错误,无效字符
    2023-07-20 10:32 
最佳回答
0
用户k6280494Lv6专家互助
发布于2023-7-14 14:55(编辑于 2023-7-14 14:56)

select * from 表

order by name,LEVEL

最佳回答
0
用户ZeYji2915Lv4见习互助
发布于2023-7-14 14:56

row_number 分组排序

最佳回答
0
ZxxTLv6初级互助
发布于2023-7-14 17:02

oracal能写窗口函数的吧

rank over (pratition by name order by level)

  • 5关注人数
  • 288浏览人数
  • 最后回答于:2023-7-14 17:02
    请选择关闭问题的原因
    确定 取消
    返回顶部