archcutbank
archcutbank

Reputation: 479

Exclude rows with a column containing a value if multiple rows exist for

Table has

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

If User has a value of 284 for example, then I want the result set not to include him I am not sure how to check all rows of User to see if there is the 284 value and then not show that user in the resultset if it is there. The resultset should be distinct.

The end resultset should be

User
greg
sally

Upvotes: 2

Views: 11459

Answers (4)

Mubbashar
Mubbashar

Reputation: 643

You can use group by user and also count how many users with value != 284

Here is SQL

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

Upvotes: 0

praveen
praveen

Reputation: 12271

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

Upvotes: 5

GilM
GilM

Reputation: 3761

Another option is a self-join:

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

Upvotes: 0

Eric
Eric

Reputation: 95133

Use 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
    )

What this does is it grabs all the users from the users table where they don't have a row with the value 284 in the users table. You can also do exists as a converse (finding only users with a 284 value).

Additionally, use a distinct on the select to limit the users returned to their unique values.

Upvotes: 9

Related Questions