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

分组子句中CASE表达式(ELSE '不分组'):SQL查询方案是否正确?

问题分析与解决方案

原查询不正确,无法满足需求,以下是具体分析和修正方案:

原查询的问题

原查询的GROUP BY逻辑存在两处关键错误:

  • 当Linked IS NULL时按JobNo分组,Linked IS NOT NULL时按NULL分组,这会把所有Linked非空的行合并成一个组,最终仅返回一个JobNo(如12345)。
  • 完全未处理需求中的核心判断条件:该JobNo是否在更早日期已有Status='New'的记录,直接导致符合条件的12351被遗漏。

正确实现方案

要满足需求,需先筛选出指定日期的New状态记录,再对每个JobNo做双重判断:

  1. 若该JobNo无更早的New状态记录,直接纳入结果;
  2. 若存在更早的New记录,则当前记录的Linked字段不能为NULL。

代码实现

-- 定义目标查询日期
DECLARE @TargetDate DATE = '20230101';

SELECT DISTINCT j.JobNo
FROM Jobs j
WHERE j.Entered = @TargetDate
  AND j.Status = 'New'
  AND (
    -- 情况1:该JobNo没有更早的New状态记录
    NOT EXISTS (
      SELECT 1
      FROM Jobs j_earlier
      WHERE j_earlier.JobNo = j.JobNo
        AND j_earlier.Status = 'New'
        AND j_earlier.Entered < @TargetDate
    )
    OR
    -- 情况2:存在更早的New记录,但当前Linked不为空
    j.Linked IS NOT NULL
  );

结果验证

执行上述代码后,会返回12345和12351,完全符合预期:

  • 12345:存在2021-12-29的New记录,但当前Linked非空,满足条件;
  • 12351:无更早的New记录,直接满足条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:33:26