[SQL]如何解決除數等於0 |
答題得分者是:cobraliu
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
小弟撰寫一各SQL,判斷計算除法
但是有些欄位的數值是0 執行會出現 "除數等於0" 的錯誤訊息 那我寫入DECODE 0 -> 1 可是變成 0 - > 1 其餘的都不見了 請教各位大大 該如何下判斷式呢 [code sql] SELECT A.WORK_ORDER,B.PART_NO, MAX(DECODE(D.PROCESS_NAME,'ASSYT01','組裝1','ASSYT02','組裝2','ASSYT03','O.S','ASSYT04','組裝4')) "PROCESS", SUM(A.FAIL_QTY) "FAIL_COUNT", SUM(A.OUTPUT_QTY) "OUT_COUNT", DECODE((SUM(A.OUTPUT_QTY)) (SUM(A.FAIL_QTY)),'0','1') "RATE%" -- <- 這段判斷 FROM G_SN_COUNT A, SYS_PART B, SYS_STAGE C, SYS_PROCESS D WHERE A.WORK_DATE = TO_CHAR(SYSDATE,'YYYYMMDD') AND A.MODEL_ID = B.PART_ID AND A.STAGE_ID = C.STAGE_ID AND C.STAGE_NAME LIKE ('ASSYT') AND A.PROCESS_ID = D.PROCESS_ID [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
忘了
一般會員 發表:0 回覆:2 積分:0 註冊:2008-02-21 發送簡訊給我 |
|
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
Try It
select T_NO, decode(sum(t_am) sum(t_rr), 0, 1, sum(t_am) sum(t_rr)) from XTAB group by T_No ===================引 用 lovemari 文 章=================== 小弟撰寫一各SQL,判斷計算除法 但是有些欄位的數值是0 執行會出現 "除數等於0" 的錯誤訊息 那我寫入DECODE 0 -> 1 可是變成 0 - > 1 其餘的都不見了 請教各位大大 該如何下判斷式呢?
------
What do we live for if not to make life less difficult for each other? |
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
===================引 用 cobraliu 文 章=================== 插花一下 版大的問題christie大大以經解決了! 在Oracle中的Decode(a,b,c,d) a:表傳入的值 如果a等於b,則回傳C 否則傳回d(如果沒有d的參數就什麼都沒有,大大應就是少這一個) 如果為 Decode(a,b,c,d,e,f,g,h) 如果a等於b,則回傳c 如果a等於d,則回傳e 如果a等於f,則回傳g 不為「b,d,f」則回傳h 可是我只想把 0 - > 1 , 其餘0 以外的數字照常顯示 怎下SQL = =a
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
你這樣說我比較不了解你的意思!
因為你的SQL是下面這一行 DECODE((SUM(A.OUTPUT_QTY)) (SUM(A.FAIL_QTY)),'0','1') "RATE%" 然而你用的指定給"RATE%" 我就沒用過,回公司再試試...XD Delphi的我是不太熟,但Oracle的我是沒看過這樣的下法...見識少...請見量..@@ 如果我的解譯是這樣 你是SUM(A.OUTPUT_QTY) / (SUM(A.FAIL_QTY) 為0時,你要用1表示 那你可以試著改成這樣 Decode(SUM(A.FAIL_QTY),0,1,(SUM(A.OUTPUT_QTY) / SUM(A.FAIL_QTY))) 分母是:A.FAIL_QTY時,當它為0時你的值回傳1 因為只有是0除任何數會為0 若分母不是0,那除出來一定有值,如:1/10=0.1或1/3=0.3 若你的值為小數點時你要用0若1表示 可以用Floor或Ceil或Round這方式來改變第4個參數 ===================引 用 lovemari 文 章=================== ===================引 用 cobraliu 文 章=================== 插花一下 版大的問題christie大大以經解決了! 在Oracle中的Decode(a,b,c,d) a:表傳入的值 如果a等於b,則回傳C 否則傳回d(如果沒有d的參數就什麼都沒有,大大應就是少這一個) 如果為 Decode(a,b,c,d,e,f,g,h) 如果a等於b,則回傳c 如果a等於d,則回傳e 如果a等於f,則回傳g 不為「b,d,f」則回傳h 可是我只想把 0 - > 1 , 其餘0 以外的數字照常顯示 怎下SQL = =a
------
初學、初學、學了很久...還是在初學階段..Orz |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
答案應如 christie 所言,
我想您想得到的是 DECODE(SUM(A.OUTPUT_QTY) SUM(A.FAIL_QTY), '0','1', SUM(A.OUTPUT_QTY) SUM(A.FAIL_QTY) ) "RATE%" 重點是 '0','1' 後要加 ,SUM(A.OUTPUT_QTY) SUM(A.FAIL_QTY) 代表如果不是 0 就傳回的值, 這些幾位大大都有提到 更保險的話, 請試 DECODE(SUM(nvl(A.OUTPUT_QTY,0)) SUM(nvl(A.FAIL_QTY,0)), 0,1, SUM(nvl(A.OUTPUT_QTY,0)) SUM(nvl(A.FAIL_QTY,0)) ) "RATE2" 我沒試欄位名稱是否可以用 RATE 或 RATE% , 不過直覺好像都不太保險, 所以改成 RATE2
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |