3

这是我开始的代码,它不太正确:

 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 个人感到难过。

4

3 回答 3

0

从您的 group by 子句中删除pm.[amount] + Nz(pm.[SFS],0)- 您不想按总和分组,只有帐户

于 2012-05-02T18:06:52.473 回答
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)
);
于 2012-05-02T22:44:50.207 回答
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
);
于 2012-05-03T14:30:16.180 回答