線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:882
推到 Plurk!
推到 Facebook!

再謝Fishman ,再請教Update問題

答題得分者是:Fishman
zhczm
一般會員


發表:66
回覆:15
積分:16
註冊:2003-06-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-06 08:35:26 IP:211.152.xxx.xxx 未訂閱
物料兩個庫: 1。物料盤點庫:A no(物料編號) l(盤點數量) 2。物料庫存庫:B no(物料編號) l(庫存數量) 如何一次下Update 用盤點數量更新庫存數量? 現在我是在用戶端用循環程序作的,太慢。 請教你,謝謝
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-06 08:51:39 IP:210.65.xxx.xxx 未訂閱
Hi:    我用的是 Oracle 語法,不知 SQL Server 是否也可以 < class="code"> UPDATE B SET QTY = (SELECT QTY FROM A WHERE A.NO = B.NO) WHERE EXISTS (SELECT QTY FROM A WHERE A.NO = B.NO) -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-06 09:04:17 IP:210.65.xxx.xxx 未訂閱
Hi:    剛剛 Try 了一下,SQL Server 似乎也接受相同的語法你可以試試看,不過建議你先測試無誤後,再執行該動作,以免< > 再者,直接更新庫存好嗎< >理論上,庫存異動應該都有交易紀錄可供查詢,否則到時候會無法對帳,是否應改同時新增一筆交易紀錄去認列盤盈虧 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
zhczm
一般會員


發表:66
回覆:15
積分:16
註冊:2003-06-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-06 14:41:37 IP:211.152.xxx.xxx 未訂閱
UPDATE mcycl SET kc = (SELECT rks FROM mcrkmx WHERE mcrkmx.yclbh = mcycl.yclbh AND mcrkmx.rklb = 3 AND cgdh = '正單') WHERE EXISTS (SELECT rks FROM mcrkmx WHERE mcrkmx.yclbh = mcycl.yclbh AND mcrkmx.rklb = 3 AND cgdh = '正單') 謝謝你,在你的熱心幫助下,我的目的達到了! 又有以下2個問題: 1.如果mcrkmx庫中,針對yclbh,rklb,cgdh三個段位有重復記錄時,則無法執行Update,我的問題是如何用Delete 刪除mcrkmx庫中針對以上三個段位的重復記錄。 2.如何把mcrkmx庫中有的記錄,而mcycl庫中沒有的記錄用Insert into一次追加到mcycl庫中. 謝謝!! 發表人 - zhczm 於 2004/02/06 15:18:17
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-06 15:42:08 IP:61.221.xxx.xxx 未訂閱
zhczm 兄 目的達到了快給ㄍ分數吧, Fishman兄將要獲得小獎牌了,先恭喜Fishman ~~應無所住而生其心~~
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-06 15:51:25 IP:210.65.xxx.xxx 未訂閱
Hi:    zhczm,    1.如果盤點結果(mcrkmx)有重複資料,且數量(rks)不一致,刪除準則為何?   之所以無法 update 原因是出在以下紅色部分的語法中會篩選出超過兩筆資料
引言:
UPDATE MCYCL
SET KC =       (SELECT  RKS
                FROM    MCRKMX
                WHERE   MCRKMX.YCLBH = MCYCL.YCLBH AND MCRKMX.RKLB = 3 AND CGDH = '正單')
WHERE EXISTS   (SELECT  RKS
                FROM    MCRKMX
                WHERE   MCRKMX.YCLBH = MCYCL.YCLBH AND MCRKMX.RKLB = 3 AND CGDH = '正單')
你可以更改為
SELECT  SUM(RKS) -- OR AVG(RKS),MAX(RKS),MIN(RKS)
FROM    MCRKMX
WHERE   MCRKMX.YCLBH = MCYCL.YCLBH AND MCRKMX.RKLB = 3 AND CGDH = '正單')
確保只有一筆資料,理論上,YCLBH 、RKLB 、CGDH 應該組合唯一個 Unique Key 2.大致如下,請自行加以修正,請注意重複值問題
INSERT  INTO MCYCL
       (YCLBH,
        RKLB,
        CGDH,
        KC)
SELECT  YCLBH,
        RKLB,
        CGDH,
        RKS
FROM    MCRKMX
WHERE   NOT EXISTS (SELECT  'NOT EXISTS IN MCYCL'
                    FROM    MCYCL
                    WHERE   MCRKMX.YCLBH = MCYCL.YCLBH
                    AND     MCRKMX.RKLB = 3
                    AND     MCRKMX.CGDH = MCYCL.CGDH
                    AND     MCYCL.CGDH = '正單') 
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
zhczm
一般會員


發表:66
回覆:15
積分:16
註冊:2003-06-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-06 16:13:19 IP:211.152.xxx.xxx 未訂閱
1.如果mcrkmx庫中,針對yclbh,rklb,cgdh三個段位有重復記錄時,則無法執行Update,我的問題是如何用Delete 刪除mcrkmx庫中針對以上三個段位的重復記錄。 此問題如果用Select 找出針對yclbh,rklb,cgdh三個段位的所有重復記錄也可; 我在用戶端可以用循環程序找到,太慢 如何用Select一次找到
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-06 16:23:51 IP:210.65.xxx.xxx 未訂閱
Hi:    如過要刪除並保留一筆,你可必須先將重複資料寫入一暫存 Table,再刪除正式 Table 後再將重複資料回寫,當然必須控制指回寫一筆
select  yclbh,
        rklb,
        cgdh,
        count(*)
from    mcrkmx
group by
        yclbh,
        rklb,
        cgdh
having count(*) >= 2
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
系統時間:2024-07-06 16:42:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!