如何用SQL调整Organisation表行顺序,将ID4放在ID1与ID2之间?
如何自定义SELECT查询的结果排序,让指定行调整位置?
我有一张名为Organisation的表,数据如下:
| ID | Resource |
|---|---|
| 1 | Software Engineer |
| 2 | Tech Lead |
| 3 | Architect |
| 4 | Senior Software Engineer |
| 5 | HR |
我需要通过SELECT查询获取数据,让ID为4的行位于ID为1和ID为2的行之后、ID为3的行之前,期望输出如下:
| ID | Resource |
|---|---|
| 1 | Software Engineer |
| 2 | Tech Lead |
| 4 | Senior Software Engineer |
| 3 | Architect |
| 5 | HR |
请问该如何实现?
解决方案
方法1:通过CASE WHEN定义明确排序优先级
在ORDER BY子句中使用CASE语句,为每个需要调整顺序的ID分配专属排序值,精准控制行的位置:
SELECT ID, Resource FROM Organisation ORDER BY CASE ID WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 4 THEN 3 WHEN 3 THEN 4 WHEN 5 THEN 5 ELSE ID -- 处理未指定的ID,保持原ID顺序 END;
方法2:简化的数值偏移排序
如果仅需要调整ID=4的位置,其余ID基本按原数值顺序排列,可以给ID=4设置一个介于2和3之间的中间值,让排序逻辑更简洁:
SELECT ID, Resource FROM Organisation ORDER BY CASE WHEN ID = 4 THEN 2.5 ELSE ID END;
这个方法利用数值大小排序的特性,让ID=4的排序值(2.5)介于ID=2(2)和ID=3(3)之间,自然得到期望的排列顺序。
内容的提问来源于stack exchange,提问作者harish
相关产品推荐
相关产品推荐

