我如何 select 行,其中只有 return 键在 c 列中没有“1”

How do I select rows where only return keys that don't have '1' in column c

我知道标题令人困惑,我只是不确定如何表达。无论如何,让我用 table:

来描述

| key | column b | column c | |-----|----------|----------| | a | 13 | 2 | | a | 14 | 2 | | a | 15 | 1 | | b | 16 | 2 | | b | 17 | 2 |

我想 select 列 c 不等于 1 的所有键,因此 select 将导致 return 仅键 'b'

澄清一下,我的结果集不应包含具有 c 列设置为 1 的行的键。因此,我想要一个 sql 查询,该查询将 return 满足的键前面的语句。

为了让我的问题尽可能清楚。从上面的 table 中,我想要 return 由一些 sql 语句编辑的是一个包含 [{b}] 的结果集,基于这样一个事实,即键 'a' 至少有c 列等于 1 的一行,而键 'b' 在 c 列中没有包含 1 的任何行。

SELECT t.[Key]
FROM TableName t 
WHERE NOT EXISTS (SELECT 1 
                  FROM TableName 
                  WHERE t.[key] = [key]
                   AND ColumnC = 1)
GROUP BY t.[Key]
SELECT KEY
FROM  WhateverYourTableNameIs 
WHERE c <> '1'

我会使用 group by 和聚合来做到这一点:

select [key]
from table t
group by [key]
having sum(case when c = 1 then 1 else 0 end) = 0;

having 子句计算具有 c = 1 的行数。 = 0 表示给定键没有这样的行。

根据其他评论的阐述:

您要求 ALL keys where column c doesn't equal 1。那就是 完全 我建议的查询将为您提供的内容。您问题的另一部分 so the SELECT will result in returning only key 'b' 含糊不清。 as asked 问题将为您提供 A B 列的结果。您的问题中没有任何限制结果集的内容。您要么需要 WHERE 子句的附加条件,要么您的问题本质上无法回答。