在不创建物理表的情况下从组查询更新

时间:2012-04-24 12:43:25

标签: ms-access select group-by temp-tables

我有一个名为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中执行查询。

提前感谢您的回答!

1 个答案:

答案 0 :(得分:1)

怎么样:

UPDATE ECD 
SET ECD.lettrage = IIf(DSum("Mont","ECD","cle2='" & [cle2] & "'")=0,"Ok","Suspens");