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

如何在SQL中对特定行查询返回的列值进行排序?

解决方案:调整查询返回列的数值顺序

要实现将MARKS_TABLE中Id='X'的记录返回时,让Sub1、Sub2、Sub3列的值按55、65、100的固定顺序排列,普通ORDER BY无法满足需求(它只能对行排序,不能调整列内值的顺序),可以通过「列转行→指定规则排序→行转列」的思路来实现:

实现SQL代码

SELECT
  Id,
  MAX(CASE WHEN rn = 1 THEN val END) AS Sub1,
  MAX(CASE WHEN rn = 2 THEN val END) AS Sub2,
  MAX(CASE WHEN rn = 3 THEN val END) AS Sub3
FROM (
  -- 第一步:将Sub1/Sub2/Sub3列拆分为单独的行
  SELECT
    Id,
    val,
    -- 第二步:按指定的数值顺序分配排序优先级
    ROW_NUMBER() OVER (ORDER BY 
      CASE val 
        WHEN 55 THEN 1 
        WHEN 65 THEN 2 
        WHEN 100 THEN 3 
        ELSE 4 -- 其他数值排在最后
      END) AS rn
  FROM MARKS_TABLE
  CROSS JOIN (
    SELECT Sub1 AS val UNION ALL
    SELECT Sub2 UNION ALL
    SELECT Sub3
  ) AS vals
  WHERE Id = 'X'
) AS sorted_vals
-- 第三步:将排序后的行转回列
GROUP BY Id;

代码说明

  1. 列转行:通过UNION ALL把Sub1、Sub2、Sub3三个列的数值拆成每行一个值,方便后续排序操作。
  2. 指定规则排序:用CASE语句给目标数值分配排序优先级(55对应1,65对应2,100对应3),再通过ROW_NUMBER()给每行标记排序后的序号。
  3. 行转列:外层用MAX(CASE...)根据序号把排序后的数值重新映射到Sub1、Sub2、Sub3列,最终得到按指定顺序排列的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:10:47