2012-05-02 42 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