检查所有行的列中的值是否正好是值

时间:2011-03-27 12:14:33

标签: sql

例如,我想要将数字2作为目标

这应该返回正面指示:

ID       Status
123      2
432      2
531      2
123      2

这应该返回负面指示:

ID       Status
123      1
432      3
531      2
123      2

这应该返回负面指示:

ID       Status
123      1
432      1
531      1
123      1

由于

3 个答案:

答案 0 :(得分:14)

EXISTS应优先于COUNT使用,以便在找到第一个非匹配行后立即返回。

SELECT CASE
         WHEN NOT EXISTS(SELECT *
                         FROM   your_table
                         WHERE  status <> 2) THEN 'Y'
         ELSE 'N'
       END AS your_result  

您没有声明RDBMS。您可能需要将FROM DUAL附加到上面依赖于味道的末尾。

答案 1 :(得分:3)

select (select count(distinct status) from T)  = 1 

将返回1或0(即true或false),具体取决于所有行是否在Status中具有相同的值。如果必须处理状态中的NULL值:

select exists 
( select status from T where status <> 2 or status is null)
as StatusContainsOtherThanTwoOrNullValue

答案 2 :(得分:1)

select count(*) where Status != 2