如果存在多行,则排除包含值的列

时间:2012-01-11 20:16:31

标签: sql sql-server tsql

表有

User   Value
john   284
john   200
john   5
sally  245
sally  180
sally  10
bill   90
bill   1000
bill   284
greg   10
greg   90
greg   2000

例如,如果User的值为284,那么我希望结果集不包含他 我不知道如何检查User的所有行以查看是否存在284值,然后在结果集中不显示该用户(如果存在)。结果集应该是不同的。

最终结果集应为

User
greg
sally

4 个答案:

答案 0 :(得分:8)

使用not exists

select distinct
    user
from
    users u
where
    not exists (
       select
           1
       from
           users u2
       where
           u2.user = u.user
           and u2.value = 284
    )

这样做是为了抓住users表中没有284表中值为users的行的所有用户。您也可以exists作为对话(仅查找284值的用户)。

此外,使用distinct上的select来限制用户返回其唯一值。

答案 1 :(得分:5)

    Select distinct User from table
    where User not in ( Select User from table
    where value =284)

答案 2 :(得分:0)

另一种选择是自我加入:

SELECT DISTINCT u1.[User]
FROM users u1
LEFT OUTER JOIN users u2 ON u2.[User] = u1.[User] AND u2.Value = 284
WHERE u2.[User] IS NULL

答案 3 :(得分:0)

您可以按用户分组,还可以计算有多少用户具有值!= 284

这是SQL

Select   `User`
,count(*)- SUM(CASE WHEN `Value` != 284 THEN 1 ELSE 0 END) 284Val
from table
group by `User`
having 284Val = 0;