2012-05-02 47 views
3

這裏是我開始的代碼,不工作很正確:總和與表達,並通過組在Access 2007/VBA

UPDATE mt 
SET mt.action = 'A', mt.TQA = TRUE, 
    mt.OPID = 'SYS', mt.rc= 'DAR', mt.h='DAR' 
WHERE EXISTS 
(
    SELECT mt.Account FROM mt AS pm 
    WHERE mt.Account = pm.Account 
    GROUP BY pm.Account, pm.[amount] + Nz(pm.[SFS],0) 
    HAVING (pm.[amount] + Nz(pm.[SFS],0) > 500) 
); 

我需要的是數量和SFS的總和爲該帳戶的這500多名

例如,所有實例,如果我有如下表

Account Amount SFS 
123  350.00 0.00 
123  125.00 125.00 
123  350.00 0.00 
123  125.00 125.00 
234  1600.00 5.00 
345  2.50  4.60 

我應該得到

123 1200.00 
234 1605.00 

我用上面的代碼得到的是不同的總計獨自一人,而不是組,這意味着他們不會被抓到> 500:

123 350.00 
123 250.00 
234 1605.00 

誰能幫助?這讓我們中的5人難倒。

+0

不夠公平。當我放入標籤時,我想「這將通過vba使用」,但它實際上不在問題中,所以你是正確的。謝謝。 – graidan

回答

0

我需要使用兩個子查詢。這是最後的工作。

UPDATE mt 
SET rc='DAR' 
WHERE Account IN 
(
    SELECT mt.account 
    FROM 
    (
    SELECT mt.Account, SUM(mt.[amount]+Nz(mt.[SFS],0)) as total 
    FROM mt 
    GROUP BY mt.Account 
    )  
    WHERE total>=500 
); 
0

by子句從組中刪除pm.[amount] + Nz(pm.[SFS],0) - 你不想按總和,只有賬戶

+0

我同意,但當我這樣做與子查詢(假設更新是好的),Access給我以下錯誤:您試圖執行一個查詢,不包括指定的表達式'(pm.amount + nz(pm。 sfs,0)> 500'作爲聚合函數的一部分 – graidan

+0

這是相關的:SELECT字段列表中的所有字段必須包含在GROUP BY子句中或作爲參數包含在SQL聚合函數中。新... – graidan

+0

沒關係 - 沒有我想象中的那麼相關 – graidan

0

也許這是你在找什麼:

UPDATE mt 
SET mt.action = 'A', mt.TQA = TRUE, 
    mt.OPID = 'SYS', mt.rc= 'DAR', mt.h='DAR' 
WHERE EXISTS 
(
    SELECT mt.Account FROM mt AS pm 
    WHERE mt.Account = pm.Account 
    GROUP BY pm.Account, pm.[amount] + Nz(pm.[SFS],0) 
    HAVING (SUM(pm.[amount] + Nz(pm.[SFS],0)) > 500) 
); 
+0

不是 - 和Sean推薦的問題一樣,盡我所能,儘管我找到了一個解決方案! – graidan