Reputation: 433
For example, I want follow the number 2 as target
This should return positive indication:
ID Status
123 2
432 2
531 2
123 2
This should return negative indication:
ID Status
123 1
432 3
531 2
123 2
This should return negative indication:
ID Status
123 1
432 1
531 1
123 1
Thanks
Upvotes: 14
Views: 54502
Reputation: 5421
select (select count(distinct status) from T) = 1
will return 1 or 0 (i.e. true or false) depending on whether all of the rows have the same value in Status or not. If you have to deal with NULL values in status:
select exists
( select status from T where status <> 2 or status is null)
as StatusContainsOtherThanTwoOrNullValue
Upvotes: 6
Reputation: 453837
EXISTS
should be used in preference to COUNT
so it can return as soon as the first non matching row is found.
SELECT CASE
WHEN NOT EXISTS(SELECT *
FROM your_table
WHERE status <> 2) THEN 'Y'
ELSE 'N'
END AS your_result
You don't state RDBMS. You might need to append FROM DUAL
onto the end of the above dependant on flavour.
Upvotes: 19