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

gil*_*nan 8 sql

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

这应该返回积极的迹象:

ID       Status
123      2
432      2
531      2
123      2
Run Code Online (Sandbox Code Playgroud)

这应该返回负面指示:

ID       Status
123      1
432      3
531      2
123      2
Run Code Online (Sandbox Code Playgroud)

这应该返回负面指示:

ID       Status
123      1
432      1
531      1
123      1
Run Code Online (Sandbox Code Playgroud)

谢谢

Mar*_*ith 14

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

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

您没有陈述RDBMS.您可能需要追加FROM DUAL到上面的依赖于味道的末尾.

  • @demo 这不是改进。/sf/ask/111820971/ (2认同)

Red*_*ick 5

select count(*) where Status != 2


Tim*_*Tim 5

select (select count(distinct status) from T)  = 1 
Run Code Online (Sandbox Code Playgroud)

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

select exists 
( select status from T where status <> 2 or status is null)
as StatusContainsOtherThanTwoOrNullValue
Run Code Online (Sandbox Code Playgroud)