如何用sql语句进行列间计算?

[复制链接]
查看11 | 回复4 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
比如:有两列b1,b2,想在想对两列进行这样的计算,
(b2-b1)/b1,主要是要对两列进行0和空值的判断,
若b1,b2有一个为空,则表达式结果为空,
decode函数只能判断一列,怎样做比较好?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select decode( nvl(b1, 0), 0, 0, ( nvl(b2, 0) - b1 ) /b1 ) from ...
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
很受启发,
不过如果b2为空值的话,结果为-1,不大合理,
decode( nvl(b1, 0), 0, null, decode( b2,null,null,(b2-col1)/b1) )
这样应该差不多了
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
还有,如何显示小数点前面的0,
比如(3-2)/2=0.5,
oracle只显示 .5
如何全部显示?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 jaunt 发布
[B]select decode( nvl(b1, 0), 0, 0, ( nvl(b2, 0) - b1 ) /b1 ) from ... [/B]

关于decode函数调用过程的理解 大侠们帮忙看看理解得对不对
decode( nvl(b1, 0), 0, 0, ( nvl(b2, 0) - b1 ) /b1 )
1 nvl(b1, 0) 如果结果为0 则表达式返回结果为0
2 nvl(b1, 0)不为0则计算( nvl(b2, 0) - b1 ) /b1 返回( nvl(b2, 0) - b1 ) /b1的结果

疑问 oracle decode()执行顺序?
是先把 decode( nvl(b1, 0), 0, 0, ( nvl(b2, 0) - b1 ) /b1 ) 中各个表达式计算出结果 再decode
还是如我所理解的那样 先算nvl(b1, 0)

谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行