0

我的结果集中有三列;

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

谢谢你的帮助!克里斯

4

3 回答 3

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
于 2013-06-05T11:28:03.390 回答
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 ...

无需所有表达式评估即可工作。

于 2013-06-05T11:37:11.857 回答
0

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

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

于 2013-06-05T12:07:15.267 回答