Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何检查表是否包含不同的值?_Sql_Tsql - Fatal编程技术网

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

Sql 如何检查表是否包含不同的值?,sql,tsql,Sql,Tsql,我有一张桌子: Id Value 1 79868 2 79868 3 79868 4 97889 5 97889 现在,我想用bool变量进行下一次选择,该变量检查表的列值是否包含difrent值。大概是这样的: select v= (select case when exists(...) then 1 else 0 end) 表cont

我有一张桌子:

Id Value
1  79868
2  79868
3  79868
4  97889
5  97889
现在,我想用bool变量进行下一次选择,该变量检查表的列值是否包含difrent值。大概是这样的:

 select  
        v= (select case when exists(...)
                    then 1 
                    else 0
                    end)
表contais值:7986897889,因此在其他情况下v应返回1 0。
如何在侧选择框中写入选择???

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

select (case when (select min(value) from t) = (select max(value) from t)
             then 1 else 0
        end) as all_same
对于值的索引,这应该非常快


上述解决方案假定不存在空值或应忽略空值。

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

select (case when (select min(value) from t) = (select max(value) from t)
             then 1 else 0
        end) as all_same
对于值的索引,这应该非常快

上述解决方案假定不存在空值或应忽略空值。

您可以尝试以下方法:

SELECT CASE COUNT(*)
         WHEN 1 THEN 1
                ELSE 0
       END AS all_equal
FROM (SELECT DISTINCT Value FROM my_table);
你可以试试这个:

SELECT CASE COUNT(*)
         WHEN 1 THEN 1
                ELSE 0
       END AS all_equal
FROM (SELECT DISTINCT Value FROM my_table);
所以,您只需要一个带有两个布尔变量的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
所以,您只需要一个带有两个布尔变量的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

如果我答对了您的问题,您需要检查value列是否包含超过1个不同的值。你可以使用

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

如果我答对了您的问题,您需要检查value列是否包含超过1个不同的值。你可以使用

select (case when count(value) > 1 then 1 else 0 end) as out 
from (select value from table group by value)  temp
但愿这样更好:

SELECT CASE COUNT(DISTINCT value) WHEN 1 THEN 1
                                         ELSE 0
       END AS all_equal
FROM   my_table;
但愿这样更好:

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

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

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;

我喜欢Gordon best的min-max答案

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

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;

我喜欢Gordon best的min-max回答,即使有空值也有效。即使有空值也有效。您希望如何处理空值?如何处理空值?即使有空值也有效。即使有空值也有效。假设没有空值。假设没有空值。假设没有空值。假设没有空值。假设有空值没有空值。