作者paranoia5201 (社会黑暗、行路难)
看板Database
标题[SQL ] 栏位是0的计算求解
时间Wed Oct 30 09:59:47 2019
资料库名称:Oracle
资料库版本:??
内容/问题描述:
我的资料长相如下
Time A B
27-OCT-19 2085046 3702122
20-OCT-19 4721397 8850998
13-OCT-19 5824087 9722262
06-OCT-19 6207165 11005451
29-SEP-19 8014455 13449718
22-SEP-19 5565446 8359561
15-SEP-19 1640913 2579993
08-SEP-19 0 0
01-SEP-19 0 0
25-AUG-19 0 0
期望建立一个C栏位,公式为C = (B-A) / B
由於最後三栏的资料都是零,所以会出现错误码:
ORA-01476: divisor is equal to zero
现在我的作法是拿掉那三个时间後做计算就可以了,
但是主管希望还是可以在C栏位里面出现这三个时间并显示0,
请问有什麽方式可以处理?
感谢指教~
现在的SQL写法:
select time, a, b, ((b - a) / b) as c
from table
where to_char(time, 'YYYYMMDD') not in ('20190825', '20190901', '20190908')
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.230.162.34 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1572400789.A.1C1.html
1F:→ retsamsu: google oracle iif 10/30 10:59
2F:推 cp83611: 乱写一波~ 10/30 23:58
3F:→ cp83611: select time, a, b, ((b - a) / b) as c 10/30 23:58
4F:→ cp83611: from table 10/30 23:58
5F:→ cp83611: where b<>0 10/30 23:58
6F:→ cp83611: union all 10/30 23:58
7F:→ cp83611: select time, a, b, '0' as c 10/30 23:58
8F:→ cp83611: from table 10/30 23:58
9F:→ cp83611: where b=0 10/30 23:58
10F:推 funk6478: 可以用CASE吧 CASE WHEN b=0 THEN 0 ELSE (b-a)/b 10/31 14:56
11F:→ funk6478: END C 10/31 14:57
12F:推 cutekid: 推 funk6478 说的用 case when 10/31 20:46
13F:→ MOONY135: 直接if b is zero就直接c=0阿 11/01 14:15