递归查询后排序的问题?

--创建表-- USE TEST CREATE TABLE SPFL (    FLID INT,            --分类ID    ParentID INT NULL,   --父分类ID    FLName VARCHAR(100), --分类名称    PX INT NULL          --自定义显示顺序 ) INSERT INTO SPFL VALUES (1, NULL, '一次性(1级)',1), (2, 1, '纸杯(2级)',1), (4, 1, '保鲜膜(2级)',2), (3, 1, '保鲜袋(2级)',3), (5, 3, '顶级保鲜袋(3级)',1), (7, 5, '高级保鲜袋(4级)',1), (9, 5, '中级保鲜袋(4级)',2), (10, 5, '低级保鲜袋(4级)',3) (6, 1, '碗(2级)',2), (8, NULL, '陶瓷(1级)',2), --创建表--

上方是建表的语句,

如何做到,查询的时候,必须要以下的排序, 一次性(1级) 纸杯(2级) 保鲜膜(2级) 保鲜袋(2级) 顶级保鲜袋(3级) 高级保鲜袋(4级) 中级保鲜袋(4级) 低级保鲜袋(4级) 碗(2级) 陶瓷(1级) 是SQL server 2008 r2的版本,其中FLName不是固定的,可能会改变想实现图片的效果:

image.png

FineReport twshe 发布于 2024-11-20 20:15 (编辑于 2024-11-20 21:00)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
twsheLv6初级互助
发布于2024-11-20 22:00
WITH RecursiveCTE AS (     -- Anchor member: 获取所有一级分类     SELECT FLID, ParentID, FLName, PX, CAST(FLName AS VARCHAR(MAX)) AS Path, CAST(PX AS VARCHAR(MAX)) AS SortPath, 1 AS Level     FROM SPFL     WHERE ParentID IS NULL     UNION ALL     -- Recursive member: 递归获取子分类     SELECT s.FLID, s.ParentID, s.FLName, s.PX, r.Path + ' -> ' + s.FLName, r.SortPath + '.' + CAST(s.PX AS VARCHAR(MAX)), r.Level + 1     FROM SPFL s     INNER JOIN RecursiveCTE r ON s.ParentID = r.FLID ) -- 按照SortPath排序,并显示分类路径 SELECT FLID, ParentID, FLName, PX, Level, Path FROM RecursiveCTE ORDER BY SortPath, FLID;

问了所有AI,最后问的深度求索得到答案

最佳回答
0
CD20160914Lv8专家互助
发布于2024-11-20 20:30(编辑于 2024-11-20 20:31)

你都有排序的数字。为什么不这样按你要的排序编写数字插入?

或者自己维护一个名称与排序的数字。再关联查询不就行了

??下面是帆软的方式,最好是自己维护一个名称与排序的表数字。这样以后业务表中增加了,你在自己维护的表中增加以后,关联查询不就可以了??

order by 排序数字

利用内置数据集实现自定义排序- FineReport帮助文档 - 全面的报表使用教程和学习资料

image.png

  • twshe twshe(提问者) 我是想实现想补充的图片那样的效果,一级有一级的排序,二级有二级的排序,以此类推,每级都在级内排序
    2024-11-20 21:02 
  • CD20160914 CD20160914 回复 twshe(提问者) 你的表中要设置成一个大类的数字排序序号,一个是小类的。查询的时候先按大类排序,再排小类就可以这样显示了!
    2024-11-20 21:05 
  • twshe twshe(提问者) 回复 CD20160914 我看原有系统的数据库里的排序字段一个,没有两个字段来记录大类和小类的排序。。SQL语句能关联一下大类和小类排序吗
    2024-11-20 21:20 
  • 1关注人数
  • 116浏览人数
  • 最后回答于:2024-11-20 22:00
    请选择关闭问题的原因
    确定 取消
    返回顶部