SQL Server 2017视图层级数据自定义排序需求求助
SQL Server 2017层级数据排序解决方案
针对你遇到的层级数据排序问题,需要让1位key的顶层行优先显示,其下的2位key按txt字母顺序排列,每个2位key对应的3位key也按txt顺序紧跟其后,可以用以下ORDER BY逻辑实现:
SELECT * FROM tbl ORDER BY -- 按顶级key分组,确保同前缀的行集中显示 LEFT([key], 1), -- 构造排序键,实现层级顺序和txt排序规则 CASE LEN([key]) WHEN 1 THEN '0|' + [key] -- 1位key加前缀'0|',确保排在同组最前面 WHEN 2 THEN '1|' + LEFT([key], 1) + '|' + txt -- 2位key绑定顶级key,按txt排序 ELSE '1|' + LEFT([key], 2) + '|' + txt -- 3位key绑定对应2位父key,按txt排序 END, -- 确保同排序键下,父节点(短长度)排在子节点前面 LEN([key])
逻辑说明:
- 顶级分组:通过
LEFT([key],1)将所有同前缀的行(如A开头的所有行)集中在一起,避免不同顶级的行交叉。 - 层级与排序绑定:
- 1位key的排序键前缀为
0|,确保在同组内所有行的最前面。 - 2位key的排序键绑定到对应的顶级key,并拼接自身txt,实现同顶级下按txt排序。
- 3位key的排序键绑定到对应的2位父key,并拼接自身txt,确保紧跟在父key行之后,且按txt排序。
- 1位key的排序键前缀为
- 层级优先级:最后通过
LEN([key])确保如果出现排序键重复的情况,父节点(长度短)始终排在子节点前面。
内容的提问来源于stack exchange,提问作者emphyrio
相关产品推荐
相关产品推荐

