1

まず第一に、私はそれについての質問と回答がすでにあることを知っています.このスレッドは私が必要とするものに最も近いものです:

結合された値の合計に対する SQL 更新

FROMしかし、句の近くで発生したと思われる構文エラー (演算子がありません) が表示されます。しかし、私はそれを見ることができません。FROMそれ自体が好きではありませんか?私はFROM更新ステートメントで使用することに慣れていませんが、リンクしたばかりの QA から有効であるように思われます :|

そこに構文エラーが発生する理由は何ですか?

Access 2007 SP3 を使用しています。

編集:うわー、クエリを投稿するのを忘れていました...

UPDATE r

SET
    r.tempsmoy_requete_min = tmm.moy_mob_requete

FROM
    rapports AS r INNER JOIN
    (SELECT 
        id_fichier, 
        Round(Sum(temps_requete_min)/3,0) As moy_mob_requete,
        Round(Sum(temps_analyse_min)/3,0) As moy_mob_analyse, 
        Round(Sum(temps_maj_min)/3,0) As moy_mob_maj, 
        Round(Sum(temps_rap_min)/3,0) As moy_mob_rap, 
        Round(Sum(temps_ddc_min)/3,0) As moy_mob_ddc

    FROM maintenances 

    WHERE 
        periode In (10,9,8) And 
        annee=2011

    GROUP BY id_fichier) AS tmm ON rapports.id_rapport = tmm.id_fichier

WHERE 
    1=0

一部は、WHERE 1=0サブクエリを実行する前にさらにテストしたいためです。

編集:これは私が試している簡単なクエリです。今回は別のエラーが発生します。これで、tempsmoy_requete_min (およびおそらく他のすべての左側のオペランド) が集計関数の一部ではないことがわかります...これが私のクエリのポイントです。何か案が ?

UPDATE 
    rapports INNER JOIN maintenances ON rapports.id_rapport = maintenances.id_fichier

SET
    rapports.tempsmoy_requete_min = Round(Sum(temps_requete_min)/3,0),
    rapports.tempsmoy_analyse_min = Round(Sum(temps_analyse_min)/3,0),
    rapports.tempsmoy_maj_min = Round(Sum(temps_maj_min)/3,0),
    rapports.tempsmoy_rap_min = Round(Sum(temps_rap_min)/3,0),
    rapports.tempsmoy_ddc_min = Round(Sum(temps_ddc_min)/3,0)

WHERE 
    maintenances.periode In (10,9,8) And 
    maintenances.annee=2011 AND
    1=0

ここに画像の説明を入力

ここに画像の説明を入力

4

2 に答える 2

0

最初のクエリ サンプルを調整してみましたが、エラーを解消することができました。ただし、別のエラーが発生しました (「操作では更新可能なクエリを使用する必要があります」)。

そのエラーも克服できるかもしれません。ただし、結合の代わりにドメイン関数を使用して置換値を取得する方が簡単であることがわかりました。

UPDATE rapports
SET tempsmoy_requete_min = Round(DSum("temps_requete_min",
    "maintenances",
    "periode In (10,9,8) AND annee=2011 "
    & "AND id_fichier='" & id_rapport
    & "'")/3, 0);

この提案がtempsmoy_requete_minデータで機能する場合は、置換する他のフィールドに拡張する必要があります。それはきれいではありません。保存されたクエリを使用して、それを「ドメイン」パラメーターとして使用することで、見苦しさを軽減できます。これDSum()により、より単純な「基準」パラメーターを使用できるようになります。

于 2012-09-07T16:00:53.563 に答える
0
UPDATE r

する必要があります

UPDATE rapports

更新ターゲットでエイリアスを確実に使用することはできません。

于 2012-09-07T13:36:15.060 に答える