2016-12-05 98 views
0

我有一個表,看起來是這樣的:更新行是一個基於標準的總和

NAME   ID   CREDIT 
Item_A   10001   15600.00 
Item_B   10002   16022.50 
Item_C   10003   1800.00 
Itens_ABC  10004   0.00 
Machine_A  30001   5000.85 
Machine_B  30002   3500.99 
Machines_AB  30003   0.00 

我要更新這個表,所以它最終是這樣的:

NAME   ID   CREDIT 
Item_A   10001   15600.00 
Item_B   10002   16022.50 
Item_C   10003   1800.00 
Itens_ABC  10004   33422.50 
Machine_A  30001   5000.85 
Machine_B  30002   3500.99 
Machines_AB  30003   8501.84 

我試過在VBA代碼此行的Itens_ABC一行訪問:

SQL1 = "UPDATE INTO table SET CREDIT = IIF(ID = '10004', SUM(IIF(ID = '10003' OR ID = '10002' OR ID = '10001', CREDIT,0)), CREDIT);" 
DoCmd.RunSQL SQL1 

但它顯示語法錯誤...

回答

0

當涉及到以這種方式使用與源相同的表的更新時,訪問是一種痛苦。

一個選擇是使用臨時表來做某些事情。

SQL1 = "Select sum(T.Credit) as Cr into tblTemp from test as T where T.ID in ('10001','10002','10003')" 
docmd.runsql SQL1 
SQL1 = "Update tblTemp,test set Credit=Cr where T.ID='10004'" 
dcmd.runsql SQL1 

然後,只需刪除臨時表

0

一種方法使用子查詢。這也許是最簡單的兩個單獨的更新:

update t 
    set credit = (select sum(t2.amount) 
        from t as t2 
        where t2.id in (10001, 10002, 10003) 
    where id = 10004; 

update t 
    set credit = (select sum(t2.amount) 
        from t as t2 
        where t2.id in (30001, 30002) 
    where id = 30003; 

你可以將其組合到一個單一的聲明,但我不認爲這是值得的。

+0

我在VBA嘗試這樣做:'SQL1 =「更新測試設置信用=(SELECT SUM(T.CREDIT)FROM測試AS T WHERE T.ID IN ('10001','10002','10003'))WHERE ID LIKE'10004';'' 和'DoCmd.RunSQL SQL1',但顯示錯誤'3073':操作必須使用可更新的查詢 –