Oracle检查多个列并返回第一个不是0.00

时间:2013-06-05 11:20:54

标签: oracle plsql decode

我的结果集中有三列;

o.id    o.value_one    o.value_two    o.value_three
----    -----------    -----------    -------------
1       1.00           0.00           0.00
2       1.00           1.00           0.00
3       1.00           1.00           1.00
4       0.00           1.00           1.00
5       0.00           0.00           1.00
6       0.00           0.00           0.00

我想比较所有三个值列,并返回不是0.00的列值。

所以我会回来;

o.id    o.new_value
----    -----------
1       1.00       
2       1.00       
3       1.00       
4       1.00       
5       1.00

感谢您的帮助! 克里斯

3 个答案:

答案 0 :(得分:3)

您可以使用NULLIFCOALESCE的组合:

SELECT o.id, COALESCE(NULLIF(o.value_one, 0.0), 
                      NULLIF(o.value_two, 0.0), 
                      NULLIF(o.value_three, 0.0)) AS new_value 
FROM Foo

答案 1 :(得分:0)

select id, 
       decode(value_one, 0, 
                        decode(value_two, 0 
                               decode(value_three, 0, 0, value_three),
                               value_two),
                         value_one) new_value
from ...

无需所有表情评估。

答案 2 :(得分:0)

您可能还会考虑涉及GREATEST的表达式,例如:

GREATEST(o.value_one, o.value_two, o.value_three)