0

ここに私がこれまでに持っているものがありますが、結果は間違っています。

SELECT c.CompanyName,
       COUNT(o.OrderID) AS [Total Orders],
       SUM(
           (od.UnitPrice -
           (od.UnitPrice * od.Discount))* Quantity) AS [Purchase Total]
FROM Customers AS c,
     Orders AS o,
     [Order Details] AS od
WHERE c.CustomerID = o.CustomerID
AND o.OrderID = od.OrderID
GROUP BY c.CompanyName
ORDER BY c.CompanyName;

私が抱えている問題はカウントにあり、2倍以上ずれています。これは、OrderID が Order Details テーブルに複数回表示されるためだと思います。ネストされた SELECT ステートメントが必要だと思いますが、その方法がわかりません。

最初のクエリから SUM() 式、Order Details、および AND 句を削除しますか? それとも私は離れていますか?

助けを借りて、COUNT フィールドが機能するようになりましたが、SUM フィールドが間違っています。これは私の最近の試みであり、すべての顧客に同じ価値をもたらします。

SELECT c.CompanyName, 
       COUNT(o.OrderID) AS [Total Orders], 
        (SELECT SUM(
         (odIN.UnitPrice -
         (odIN.UnitPrice * odIN.Discount)) * odIN.Quantity) AS [OrderTotal]
         FROM [Order Details] AS odIN, Orders As oIN
         WHERE odIN.OrderID = oIN.OrderID) AS [Purchase Total]
FROM 
     Customers AS c, Orders AS o
WHERE c.CustomerID = o.CustomerID
GROUP BY c.CompanyName
ORDER BY c.CompanyName;

クエリを思いどおりに完全に機能させることができませんでした。その後、間違ったデータを探していたのかもしれないことに気付きました。そこで、COUNT フィールドの名前を Num Products Purchased に変更しました。

私はまだ他の方法で作業したいと思っていますが、計算の1つを実行してクエリから呼び出すために使用できる一時テーブルまたはビューを作成する必要があると思います. それは私が理解しなければならないことです。

助けてくれてありがとう。

4

3 に答える 3

1

Access には存在しないCOUNT(DISTINCT)ため、内部クエリを作成する必要があります。

これが行うことは、内部クエリで注文の各アイテムの合計を計算し、顧客のすべての注文合計を購入合計として合計することです。1 対 1 の関係があるため、個々の OrderID が 2 回カウントされることはありませんood

どこかに構文エラーがあるかもしれませんが、アイデアはうまくいくはずです。

SELECT c.CompanyName, 
       COUNT(o.OrderID) AS [Total Orders], 
       SUM(od.OrderTotal) AS [Purchase Total]
FROM 
     Customers AS c, 
     Orders AS o,
     (SELECT odIn.OrderID, 
         SUM(
         (odIn.UnitPrice -
         (odIn.UnitPrice * odIn.Discount)) * odIn.Quantity) AS [OrderTotal]
         FROM [Order Details] AS odIn
         GROUP BY odIn.OrderID) AS od
WHERE c.CustomerID = o.CustomerID
    AND o.OrderID = od.OrderID
GROUP BY c.CompanyName
ORDER BY c.CompanyName;
于 2013-09-12T23:58:17.983 に答える
0

問題が OrderID が複数回表示されることが原因である場合は、次のことを試してください。

SELECT c.CompanyName, COUNT(DISTINCT o.OrderID) AS [Total Orders], SUM((od.UnitPrice - (od.UnitPrice * od.Discount)) * Quantity) AS [Purchase Total]
FROM Customers AS c, Orders AS o, [Order Details] AS od
WHERE c.CustomerID = o.CustomerID AND o.OrderID = od.OrderID
GROUP BY c.CompanyName
ORDER BY c.CompanyName;

distinct 句を使用すると、各出現のみをカウントできます。

于 2013-09-12T23:58:55.997 に答える