Oracle跨多个列检查并返回第一个非0.00

Oracle跨多个列检查并返回第一个非0.00,oracle,plsql,decode,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

我的结果集中有三列

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
谢谢你的帮助!
Chris

您可以使用和的组合:


您可以使用和的组合:

不带所有表达式计算的工程


WorkW/O所有表达式求值。

您也可以考虑一个表达式,如:


<代码>最大值(O.ValueOne,O.ValueE2,O.ValueS3)

> P>您也可以考虑一个表达式,如:


magest(o.value\u one,o.value\u two,o.value\u three)

对于
id=6
,它不会返回1-三列值中没有一列不是0。是的,很抱歉,这是一个输入错误。对于
id=6
,它不会返回1-三列值中没有一列不是0。是的,很抱歉,这是一个输入错误。
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
select id, 
       decode(value_one, 0, 
                        decode(value_two, 0 
                               decode(value_three, 0, 0, value_three),
                               value_two),
                         value_one) new_value
from ...