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

請問利用SQL將多個表格合併,同一記錄有數值和NULL如何作加總。

尚未結案
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-08 16:27:52 IP:61.221.xxx.xxx 未訂閱
請問各位。 因為作報表的關係,所以將所有資料利用SQL秀出。 但是出現一個問題是如同一記錄要作加總時, 似乎會受到NULL值的影響,我嘗試利用ISNULL(), 它只是將NULL值呈現0的方式,表現出來, 並不能作數值運算。 請問各位,有什麼好方法,不然可能要利用程式去作運算。 麻煩大家。thks
FreeKiller
一般會員


發表:4
回覆:14
積分:3
註冊:2004-06-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-09 00:52:24 IP:211.76.xxx.xxx 未訂閱
NULL無法做數值運算… 可以的話把會有null又要運算的欄位Default Value設成0… 不然就要用程式去處理吧… 如果你的DB是Oracle的話…可以用nvl這個function… =========================== 我是瘦鵝… ===========================
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-09 09:36:32 IP:61.221.xxx.xxx 未訂閱
謝謝您。 因為它是由多個表格作join起來。 所以,對應時是會有null值。 那解決的方法,可能就是利用程式去作加總。 thks
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-09 10:09:46 IP:202.62.xxx.xxx 未訂閱
您好﹗    試了很久﹐在SQL敘述上仍然沒有找出解決方法﹒ 如果是用程式碼來控制的話﹐何不直接更新Null值的欄位為0﹐也以利于今后的再有類似的查詢動作﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-09 10:46:25 IP:61.221.xxx.xxx 未訂閱
真是很謝謝您。 因為我自己試好幾次。 所以,應該利用程式或者報表中去作計算。 或者利用暫存檔方式也可以解決這樣的問題。 只是覺得這樣處理起來就不漂亮嘍。 ^^ 謝謝您。
kartan_01
一般會員


發表:42
回覆:60
積分:20
註冊:2004-12-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-09 11:01:29 IP:61.221.xxx.xxx 未訂閱
使用ISNULL 完全沒問題 我是使用在SQL 2000 SELECT (ISNULL(a.purmin_qty,0)-b.un_price) as nu FROM bom99001 a LEFT JOIN bom99013 b ON a.item_no=b.cover_item_no WHERE a.fcode IN ('203','204','205') AND b.year=2005 SELECT SUM(ISNULL(a.pre_un_price,0)) as nu FROM bom99001 a LEFT JOIN bom99013 b ON a.item_no=b.cover_item_no WHERE a.fcode IN ('203','204','205') AND b.year=2005 請問你的DB是什麼?
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-09 11:12:47 IP:61.221.xxx.xxx 未訂閱
謝謝您。 DB是SQL。 以下為SQL文。  SELECT M1.TC004,MC002=M1.MC002+'  '+M1.MC003,M1.MC004,         SUM01=0,SUM02=ISNULL(M2.SUM02,0),SUM03=ISNULL(M3.SUM03,0),         SUM04=SUM01SUM02SUM03 FROM ( SELECT DISTINCT TC004,MC002,MC003,MC004 FROM BCSTC A,BCSMC B WHERE A.TC004=B.MC001 AND SUBSTRING(TC001,3,4)='原料' ) M1,( /*原料*/ SELECT TC.TC004,SUM02=ISNULL(SUM(TC.TC009),0) FROM BCSTC TC,BCSMC MC WHERE TC.TC004=MC.MC001 AND TC.TC003-1911='93' AND TC.TC007='2' AND TC.TC006='03' AND MC.MC005='4' AND MC.MC006='Y' AND SUBSTRING(TC.TC001,3,4)='原料' GROUP BY TC.TC004 ) M2, ( /*半品*/ SELECT TC.TC004,SUM03=ISNULL(SUM(TC.TC009),0) FROM BCSTC TC,BCSMC MC WHERE TC.TC004=MC.MC001 AND TC.TC003-1911='93' AND TC.TC007='2' AND TC.TC006='03' AND MC.MC005='4' AND MC.MC006='Y' AND SUBSTRING(TC.TC001,3,4)='半品' GROUP BY TC.TC004 ) M3 WHERE M1.TC004*=M2.TC004 AND M1.TC004*=M3.TC004 紅色的部份為我想要作加總的值。 因為加的符號無法秀出,只好利用中文字。 謝謝。
kartan_01
一般會員


發表:42
回覆:60
積分:20
註冊:2004-12-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-09 13:21:31 IP:61.221.xxx.xxx 未訂閱
請再加一層SELECT,把JOIN出來的TABLE再SUM一次就可以了 SELECT T1.item_no,T1.sum01,T1.sum02,T1.sum03,sum04=T1.sum01 T1.sum02 T1.sum03 FROM (SELECT item_no,sum01=sum(prd_qty) ,sum02=sum(prd_qty),sum03=sum(prd_qty) FROM invr_019 a where iim_group in ('203','204','410') GROUP BY item_no) T1
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-09 14:39:42 IP:61.221.xxx.xxx 未訂閱
謝謝您。 之前我有試過這種方式, 只是資料內還有NULL值, 麻煩您。
kartan_01
一般會員


發表:42
回覆:60
積分:20
註冊:2004-12-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-09 15:53:36 IP:61.221.xxx.xxx 未訂閱
請問是哪個欄位有NULL值?
系統時間:2024-07-01 15:47:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!