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

如何在SQL Server中用CASE语句实现带组内优先级的排序

解决方案

先明确你的Customer表数据:

NameGroupDATEcontrol
ABCNULL20 April 2023Null
XYZA19 April 2023Null
YYYA19 April 2023Y

你的需求是先按DATE降序排列,同日期且Group非空的组内,control='Y'的记录排在该组其他记录之前,之前的尝试存在两个关键问题:

  1. 未给date添加desc,导致日期按升序排列,更早的记录被排到前面
  2. case语句语法错误,且缺少Group字段的排序逻辑,无法将同组记录聚合到一起

正确的SQL语句如下:

select Name, [Group], Date, control
from Customer
order by 
    Date desc,
    [Group],
    case when control = 'Y' then 0 else 1 end

逻辑说明:

  • 第一排序条件:Date desc,确保最新日期的记录(ABC)排在最前面
  • 第二排序条件:[Group],将同日期内的同组记录归为一组(NULL组会自然排在非NULL组之前,不影响需求)
  • 第三排序条件:通过case表达式给control='Y'的记录赋值0,其他记录赋值1,默认升序排序下0会优先于1,实现同组内YYY排在XYZ前面

注意:Group是SQL保留关键字,建议用方括号[Group](适配SQL Server)或反引号`Group`(适配MySQL)包裹,避免语法报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:22