我有一个名为ECD的表,如下所示:
Cle2 Mont Lettrage
acbd.... +8,36 Suspens
abcd... -8,36 Suspens
dced.. +12,89 Suspens
dced.. -12,89 Suspens
凡是
Cle2
是标识表中属于同一组的记录的字段
Mont
是存储每条记录数量的字段
Lettrage
是存储标签的字段,该标签将根据我的查询的副本进行更改。
我要做的是基本上用Cle2对表格ECD进行分组,同时对Mont(Sum(Mont)
)的值进行求和,然后检查Mont求和由cle2
求和的值是否相等零或不。如果它们等于零,我更新Lettrage
将这些记录标记为OK,如果不是,我将这些记录标记为SUSPENS!
我已经在访问中完成了这项操作,但代码效率不高,我基本上做的是:
1,创建一个名为provisional
的新表
2,在此表中插入选择查询的值
代码:
INSERT INTO Provisor
SELECT Cle2 As Cle2p, Sum(MONTANT_ORACLE) AS Sum
FROM ECD
GROUP BY Cle2
3,创建一个表ECD2,空,与ECD相同的字段
4,在此表中插入join语句的结果,如下所示:
代码:
INSERT INTO ECDlet1
SELECT Provisor.lettrage As Let2, ecd.*
FROM Provisor
LEFT JOIN ECD ON Provisor.[Cle2p]=ECD.Cle2
5,然后清理数据库并使用正确的标签
更新Lettrage
所以我想做的就是做这样的事情而不创建所有那些愚蠢的物理表 我想强调我使用The CurrentDb.Execute语句在Visual Basic中执行查询。
提前感谢您的回答!
答案 0 :(得分:1)
怎么样:
UPDATE ECD
SET ECD.lettrage = IIf(DSum("Mont","ECD","cle2='" & [cle2] & "'")=0,"Ok","Suspens");