1

サブクエリを使用した MS Access Update ステートメント

Order テーブルと OrderDetails テーブルがあります。OrderDetails テーブルには、数量と小計を含むオーダーライン項目があります。クエリを実行して、注文テーブルの「割引前の合計金額」を対応する注文行の小計の合計値で更新したいと考えています。

私が今持っているクエリは以下のとおりです。Access で実行できませんでした。「メイン クエリの FROM 句で EXISTS 予約語を使用せずに複数のフィールドを返すことができるサブクエリを作成しました。サブクエリの SELECT ステートメントを修正して、1 つのフィールドのみを要求するようにしてください。」

UPDATE [Order] INNER JOIN OrderDetails ON Order.ID = OrderDetails.[Order ID]
SET [Order].[Total Amount Before Discount] = 
    (SELECT Order.ID, Sum(OrderDetails.[Subtotal After Discount]) AS [SumOfSubtotal After Discount]
     FROM [Order] INNER JOIN OrderDetails ON Order.ID = OrderDetails.[Order ID]
     GROUP BY Order.ID)
     WHERE (((Order.ID)=[OrderDetails].[Order ID]));
4

3 に答える 3

2

クエリでDSum 関数を使用できUPDATEます。

UPDATE [Order] AS o
SET o.[Total Amount Before Discount] = 
    DSum
        (
            "[Subtotal After Discount]",
            "OrderDetails",
            "[Order ID]=" & o.ID
        );

のデータ型が[Order ID]数値ではなくテキストである場合は、式で指定する値を引用符で囲んでくださいDSum...

            "[Order ID]='" & o.ID & "'"
于 2013-10-08T04:10:50.393 に答える
2

参加する必要はないと思います。以下はどうでしょう。

UPDATE [Order] 
SET [Order].[Total Amount Before Discount] = 
    (
      SELECT Sum(OrderDetails.[Subtotal After Discount])
      FROM OrderDetails 
      WHERE [Order].ID = OrderDetails.[Order ID]
    )

上記のクエリは、 Orderテーブルのすべてのレコードの割引前の合計金額を更新します。特定の注文 IDだけを更新する場合は、次を使用します。

UPDATE [Order] 
SET [Order].[Total Amount Before Discount] = 
    (
      SELECT Sum(OrderDetails.[Subtotal After Discount])
      FROM OrderDetails 
      WHERE [Order].ID = OrderDetails.[Order ID]
    )
WHERE [Order].ID = 786
于 2013-10-08T04:05:15.020 に答える