比较同一表中的2列值

时间:2018-09-26 14:00:14

标签: sql oracle

我有一个包含以下内容的表:

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”

如何做到?

3 个答案:

答案 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