如何对两张不同表的两列数据按主步骤+子步骤规则排序
实现方案
我们可以通过UNION ALL拼接两张表的记录,新增辅助排序字段即可实现需求,通用SQL写法如下:
SELECT StepName, OrderVal AS `Order` FROM ( -- 拉取主步骤数据 SELECT StepName, StepOrder AS OrderVal, StepOrder AS group_sort, 1 AS sort_priority FROM Table1 UNION ALL -- 拉取子步骤数据,关联主步骤表获取分组排序依据 SELECT t2.StepName, t2.SubStepOrder AS OrderVal, t1.StepOrder AS group_sort, 2 AS sort_priority, t2.SubStepOrder AS sub_sort FROM Table2 t2 JOIN Table1 t1 ON t2.StepName = t1.StepName ) AS combined_data ORDER BY group_sort ASC, -- 先按主步骤全局顺序排列 sort_priority ASC, -- 同主步骤下主记录优先展示 sub_sort ASC -- 子步骤按自身顺序升序排列
逻辑说明
- 子查询通过联合查询将主步骤、子步骤数据汇总到同一个结果集,同时给子步骤关联绑定所属主步骤的
StepOrder作为全局分组的排序依据 - 自定义
sort_priority字段:主步骤赋值为1,子步骤赋值为2,保证同组内主步骤永远排在子步骤前面 - 最终排序规则:优先按主步骤的
StepOrder全局升序,保证主步骤按顺序出现;同组内先主后子;子步骤内部按自身的SubStepOrder升序排列
用你提供的示例数据执行上述SQL,输出结果和你期望的完全一致。
内容的提问来源于stack exchange,提问作者jerry-seinfeld
相关产品推荐
相关产品推荐

