如何检查表格是否包含不同的值?

时间:2018-03-19 12:07:56

标签: sql tsql

我有桌子:

Id Value
1  79868
2  79868
3  79868
4  97889
5  97889

现在,我想用bool变量进行下一次选择,检查表格列Value中是否包含不同的值。像这样:

 select  
        v= (select case when exists(...)
                    then 1 
                    else 0
                    end)

表包含值:79868,97889因此v在其他情况下应返回1 0。 如何编写select iniside select case ??

6 个答案:

答案 0 :(得分:4)

您可以比较最小值和最大值:

select (case when (select min(value) from t) = (select max(value) from t)
             then 1 else 0
        end) as all_same

使用(value)上的索引,这应该非常快。

上述解决方案假定没有null个值或应忽略NULL个值。

答案 1 :(得分:2)

你可以试试这个:

SELECT CASE COUNT(*)
         WHEN 1 THEN 1
                ELSE 0
       END AS all_equal
FROM (SELECT DISTINCT Value FROM my_table);

答案 2 :(得分:1)

如果我的问题正确无误,您需要检查值列是否包含多于1个不同的值。您可以使用

实现此目的
select (case when count(value) > 1 then 1 else 0 end) as out 
from (select value from table group by value)  temp

答案 3 :(得分:0)

所以,你只需要一个case表达式和两个布尔变量

declare @bit1 bit = 1, @bit0 bit = 0

select 
      (case when min(value) = max(value) then @bit1 else @bit0 end) as v 
from table t
where value is not null

答案 4 :(得分:0)

愿这更好:

SELECT CASE COUNT(DISTINCT value) WHEN 1 THEN 1
                                         ELSE 0
       END AS all_equal
FROM   my_table;

答案 5 :(得分:0)

这与另一个答案相同 但是有一些测试数据

declare @T table(pk int identity primary key, val int not null);
insert into @T (val) values (79868), (79868), (79868);
select case when count(distinct(val)) = 1 then 0 else 1 end as dd 
  from @t t;
select case when min(val) = max(val) then 0 else 1 end as dd 
  from @t t;
insert into @T (val) values (97889), (97889);
select case when count(distinct(val)) = 1 then 0 else 1 end as dd 
  from @t t;
select case when min(val) = max(val) then 0 else 1 end as dd 
  from @t t;

我喜欢戈登最好的最小答案