0

次のようなECDという名前のテーブルがあります。

Cle2                 Mont           Lettrage
acbd....            +8,36            Suspens    
abcd...             -8,36            Suspens
dced..              +12,89          Suspens
dced..              -12,89           Suspens


Cle2同じグループに属するテーブル内のレコードを識別するフィールドは、レコード
Montごとの金額を格納する
Lettrageフィールドであり、クエリの結果に応じて変化するラベルを格納するフィールドです。

私がしなければならないことは、基本的にテーブル ECD を Cle2 でグループ化し、その間に Mont ( Sum(Mont)) の値を合計してから、合計してグループ化した Mont の値がcle2ゼロに等しいかどうかを確認することです。それらがゼロに等しい場合は、Lettrageそれらのレコードに OK のラベルを付けて更新します。そうでない場合は、これらのレコードに SUSPENS のラベルを付けます。

私はすでにアクセスでこれを行っていますが、コードはあまり効率的ではありません。私が基本的に行うことは次のとおりです。

1, という名前の新しいテーブルを作成しますprovisional
2, このテーブルに select Query の値を挿入します

コード:

INSERT INTO Provisor
SELECT Cle2 As Cle2p, Sum(MONTANT_ORACLE) AS Sum 
FROM ECD 
GROUP BY Cle2

3、テーブル ECD2 を作成します。空で、ECD と同じフィールドがあります。
4、このテーブルに、次のような結合ステートメントの結果を挿入します。

コード:

INSERT INTO ECDlet1 
SELECT Provisor.lettrage As Let2, ecd.*
FROM Provisor 
LEFT JOIN ECD ON Provisor.[Cle2p]=ECD.Cle2

5, 次に、データベースをクリーンアップLettrageし、正しいラベルで更新します

したがって、私がやりたいことは、CurrentDb.Execute ステートメントを使用して Visual Basic でクエリを実行することを強調したい、愚かな物理テーブルをすべて作成せずに、このようなことを行うことです。

回答ありがとうございます。

4

1 に答える 1

1

どうですか:

UPDATE ECD 
SET ECD.lettrage = IIf(DSum("Mont","ECD","cle2='" & [cle2] & "'")=0,"Ok","Suspens");
于 2012-04-24T13:43:52.673 に答える