全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5778
推到 Plurk!
推到 Facebook!

[SQL]如何解決除數等於0

答題得分者是:cobraliu
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-02-21 11:23:48 IP:60.248.xxx.xxx 訂閱
小弟撰寫一各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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-02-21 15:17:16 IP:59.124.xxx.xxx 訂閱
沒用過ORACLE不過在MS SQL可用CASE WHEN 試試吧
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-02-21 16:14:16 IP:203.73.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-02-21 19:09:36 IP:220.143.xxx.xxx 訂閱
插花一下
版大的問題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





------
初學、初學、學了很久...還是在初學階段..Orz
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-02-21 20:25:33 IP:60.248.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-02-21 21:43:46 IP:220.143.xxx.xxx 訂閱
你這樣說我比較不了解你的意思!
因為你的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
編輯記錄
cobraliu 重新編輯於 2008-02-21 21:45:46, 註解 無‧
cobraliu 重新編輯於 2008-02-21 21:46:45, 註解 無‧
cobraliu 重新編輯於 2008-02-21 21:52:33, 註解 無‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-02-22 12:57:39 IP:122.116.xxx.xxx 訂閱
答案應如 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 (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-02-22 12:59:04, 註解 無‧
st33chen 重新編輯於 2008-02-22 13:01:05, 註解 無‧
系統時間:2024-03-29 9:53:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!