1

問題が発生しているコードが 2 つあります。他の回答をいくつか見ましたが、完全に混乱しました。これがSQLコードです..(Access、SQLパススルークエリです)

UPDATE    TOP (500) InventorySuppliers
SET              BoydQuantityAvailable = SUM(Boyd0004Daily.QOH), Cost = Boyd0004Daily.Cost
FROM         Boyd0004Daily INNER JOIN
                      InventorySuppliers ON Boyd0004Daily.LocalSKU = InventorySuppliers.LocalSKU
WHERE     (InventorySuppliers.SupplierID = 4) AND (NOT (InventorySuppliers.BoydQuantityAvailable = SUM(Boyd0004Daily.QOH))) OR
                      (InventorySuppliers.SupplierID = 4) AND (NOT (InventorySuppliers.Cost = Boyd0004Daily.Cost))

SUM(Boyd0004Daily.QOH)の更新は好きではありませんが、私の人生では、それを書き直す方法を理解できていないので、選択してから1つのクエリで更新します。

4

2 に答える 2

1

がありませんgroup by。集計関数を使用するときはいつでも、集計されていないすべての列を含む group by を含める必要があります。

また、機能しない節で使用SUMしています。WHERE集計に基づいて結果をフィルタリングする場合は、HAVING代わりに使用する必要があります。

于 2013-02-20T19:01:08.880 に答える
0

あなたが最初にしたいことは、選択を正しく出すことです:

select *
from InventorySuppliers i
inner join (select LocalSKU, SUM(QOH) QOH_SUM, MAX(Cost) Cost --max or min
            from Boyd0004Daily
            group by LocalSKU) a 
        on a.LocalSKU = i.LocalSKU
where i.SupplierID = 4
and ((i.BoydQuantityAvailable != a.QOH_SUM))
    OR i.Cost != a.Cost))

次に、選択内容を更新に変換します。

update i
set i.BoydQuantityAvailable = a.QOH_SUM,
    i.Cost = a.Cost
from InventorySuppliers i
inner join (select LocalSKU, SUM(QOH) QOH_SUM, MAX(Cost) Cost --max or min
            from Boyd0004Daily
            group by LocalSKU) a 
        on a.LocalSKU = i.LocalSKU
where i.SupplierID = 4
    and ((i.BoydQuantityAvailable != a.QOH_SUM))
        OR i.Cost != a.Cost))

このクエリはあなたのために働くはずだと思います。データをテストできないため、エラーが発生する可能性があります。

于 2013-02-20T19:29:52.033 に答える