当值存在于多行时查询唯一值

Querying for Unique Values When The Value Exists on Multiple Rows

感谢阅读!

我想找到任何值(“名称”),但如果它与“”存在于同一行,我不想要该值输入 " 等于 "Z".

例如,在下面的 table 中,我想要所有 Sam 和 Joe 记录,但我不想要任何 Bob 记录,因为 Bob 所在的行之一包含一个“Z” “类型”字段中的值。如果任何 Bob 有一个“Z”,我想要“Bobs”none

Name Type
Bob A
Bob B
Bob Z
Sam A
Joe A
Joe B
Joe C

你现在可能已经猜到我的问题了。如果我尝试 select 基于包含“Z”的“Type”字段 NOT 的记录,那么我仍然会返回包含“A”和“B”的两个“Bob”行。

如果任何 bob 行包含“Z”,我不希望 任何 “Bob”行到 return。请参阅下面的预期结果:

Name
Sam
Joe

有谁知道如何在 SQL select 语句中实现这一点?

非常感谢,

洛根

您可以按 name 对查询进行分组,并有一个 having 条件来计算值为“Z”的 types:

SELECT   name
FROM     mytable
GROUP BY name
HAVING   COUNT(CASE name WHEN 'Z' THEN 1 END) = 0
SELECT t.name
FROM MyTable t
WHERE
NOT EXISTS (
               SELECT 1
               FROM MyTable
               WHERE
               name = t.name
               AND type = 'Z'
)