[SQL ] 欄位是0的計算求解

看板Database (資料庫)作者 (社會黑暗、行路難)時間5年前 (2019/10/30 09:59), 編輯推噓3(3010)
留言13則, 5人參與, 5年前最新討論串1/1
資料庫名稱: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://www.ptt.cc/bbs/Database/M.1572400789.A.1C1.html

10/30 10:59, 5年前 , 1F
google oracle iif
10/30 10:59, 1F

10/30 23:58, 5年前 , 2F
亂寫一波~
10/30 23:58, 2F

10/30 23:58, 5年前 , 3F
select time, a, b, ((b - a) / b) as c
10/30 23:58, 3F

10/30 23:58, 5年前 , 4F
from table
10/30 23:58, 4F

10/30 23:58, 5年前 , 5F
where b<>0
10/30 23:58, 5F

10/30 23:58, 5年前 , 6F
union all
10/30 23:58, 6F

10/30 23:58, 5年前 , 7F
select time, a, b, '0' as c
10/30 23:58, 7F

10/30 23:58, 5年前 , 8F
from table
10/30 23:58, 8F

10/30 23:58, 5年前 , 9F
where b=0
10/30 23:58, 9F

10/31 14:56, 5年前 , 10F
可以用CASE吧 CASE WHEN b=0 THEN 0 ELSE (b-a)/b
10/31 14:56, 10F

10/31 14:57, 5年前 , 11F
END C
10/31 14:57, 11F

10/31 20:46, 5年前 , 12F
推 funk6478 說的用 case when
10/31 20:46, 12F

11/01 14:15, 5年前 , 13F
直接if b is zero就直接c=0阿
11/01 14:15, 13F
文章代碼(AID): #1TkEwL71 (Database)
文章代碼(AID): #1TkEwL71 (Database)