我有桌子:
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 ??
答案 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;
我喜欢戈登最好的最小答案