You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server自定义排序实现:关联行紧跟对应主行的排序需求

实现指定的关联行排序需求

首先明确你的核心需求:先按Table_id排序,但如果某行的IDTable等于另一行的Table_id,该行需要紧跟在对应的主行之后。我们可以通过构造自定义排序规则来轻松实现这个效果。

原始表结构与数据

Table_idNameMarkIDTable
1John12NULL
2Alex15NULL
3Josh11NULL
4Merry172
5Gary13NULL
6Jimmy181

期望排序结果

Table_idNameMarkIDTable
1John12NULL
6Jimmy181
2Alex15NULL
4Merry172
3Josh11NULL
5Gary13NULL

解决方案SQL语句

SELECT Table_id, Name, Mark, IDTable
FROM your_table
ORDER BY
    -- 让子行与对应的主行归为同一排序组
    COALESCE(IDTable, Table_id),
    -- 确保主行(IDTable为NULL)排在子行前面
    CASE WHEN IDTable IS NULL THEN 1 ELSE 2 END,
    -- 组内及剩余无关联行按Table_id保持原始顺序
    Table_id;

逻辑解释

  1. COALESCE(IDTable, Table_id):这个函数会优先取IDTable的值,如果是主行(IDTable为NULL)就用自身的Table_id。这样子行(比如Table_id=6,IDTable=1)会和主行Table_id=1使用同一个排序键,自然被分到同一组。
  2. CASE WHEN IDTable IS NULL THEN 1 ELSE 2 END:在同一组内,给主行设置更高的排序优先级(值越小越靠前),保证主行先出现,子行紧跟其后。
  3. Table_id:最后按Table_id排序,确保没有子行的主行按原始顺序排列,同时也让子行的顺序符合预期。

执行这段SQL就能得到你想要的排序结果啦。

内容的提问来源于stack exchange,提问作者Behnam8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:58:39