我有一个包含以下内容的表:
a|b|c
-+-+-
1|2|3
2|2|2
3|2|4
4|4|4
5|6|7
我想检查所有值是否相同,如果是,请打印一条消息。 示例:行4,4,4和2,2,2具有相同的列值。所以我要打印“ SAME”,否则要打印“ Different”
如何做到?
答案 0 :(得分:3)
使用它。请注意,a=b and a=c
也意味着b=c
,因此您只需要进行两次比较。
select a,b,c, case when (a=b and a=c) then 'SAME' else 'Different' end as print
from tableName
编辑:a,b,c均为null
时的情况是不同的情况。如果要将所有三个值均为null
的行视为相同,则可以添加
or (a is null and b is null and c is null)
或or coalesce(a,b,c)is null
。
像这样:
select a,b,c,
case when ((a=b and a=c) or(a is null and b is null and c is null)) then 'SAME' else 'Different' end as print
from tableName
OR
select a,b,c,
case when ((a=b and a=c) or coalesce(a,b,c)is null) then 'SAME' else 'Different' end as print
from tableName
答案 1 :(得分:2)
如果您有多个非NULL列,那么一种很通用的方法是:
select t.*,
(case when least(a, b, c) = greatest(a, b, c) then 'SAME' else 'DIFFERENT' end) as flag
from t;
这很容易推广到更多列。
答案 2 :(得分:1)
用例何时
select case when (a=b and a=c ) then 'same' else 'Different' end as output
from t