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

Microsoft SQL查询:找出未包含Column C为Yes的重复记录分组

解决SQL查询:找出无'Yes'记录的分组

原查询的问题

你写的语句存在逻辑错误:WHERE Column C NOT IN (SELECT Column B ...) 是将Column C的取值('Yes'/'No')和Column B的取值(动物名称)做比对,类型与值完全不匹配,自然得不到正确结果。

正确解法

我们需要筛选出**Column B分组中不存在任何一行Column C='Yes'**的分组,并按要求格式输出。以下是两种可行方案:

方案1:GROUP BY + HAVING(推荐)

通过分组后筛选无'Yes'的分组,取每个分组的任意Column A(这里用最小值):

SELECT 
    MIN(ColumnA) AS ColumnA,
    ColumnB,
    'Missing Yes' AS ColumnC
FROM t
GROUP BY ColumnB
HAVING MAX(CASE WHEN ColumnC = 'Yes' THEN 1 ELSE 0 END) = 0;

逻辑说明:

  • CASE WHEN ColumnC = 'Yes' THEN 1 ELSE 0 END:将分组内的'Yes'标记为1,其他为0
  • MAX(...) = 0:表示该分组中没有任何'Yes'记录
  • MIN(ColumnA):取分组内最小的Column A,你也可以根据需求换成MAX(ColumnA)或其他取值

方案2:NOT EXISTS

通过子查询检查分组是否存在'Yes'记录,排除存在的分组:

SELECT 
    MIN(t1.ColumnA) AS ColumnA,
    t1.ColumnB,
    'Missing Yes' AS ColumnC
FROM t t1
WHERE NOT EXISTS (
    SELECT 1 
    FROM t t2 
    WHERE t2.ColumnB = t1.ColumnB 
      AND t2.ColumnC = 'Yes'
)
GROUP BY t1.ColumnB;

逻辑说明:

  • NOT EXISTS子查询检查当前Column B分组下是否有'Yes'记录,无则保留
  • 同样通过MIN(ColumnA)取分组内的任意Column A值

结果验证

执行上述语句后,会得到符合需求的输出:

ColumnAColumnBColumnC
1CatMissing Yes
6FoxMissing Yes

(注:你的期望输出中Fox的ColumnA为2是笔误,原数据中Fox的ColumnA为6和7,上述查询取最小值6,若需指定其他值可调整聚合函数)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:50:16