5

私は答えられた同様の質問を探すのに20分を費やしましたが、ほとんどはMSAccessデータベースに指定されていません。

残念ながら、SQLの私の経験は非常に限られているので、これについてのご意見をいただければ幸いです。

こちらのリンクからAccessDatabaseをダウンロードして、TestDB.zipを実行しようとしていることを確認できます。

この画像は、MS Access 2003での非常に基本的なテーブル設定の例として、私が達成したいことを示しています。
ここに画像の説明を入力してください

基本的に、関連するテーブルに保持されているすべての情報を含む注文を表示するSQLクエリを実行したいと思います。

明らかに、以下のようなSQLクエリでは、情報が繰り返された複数の行が表示されますが、これは私が望んでいることではありません。

SELECT Orders.OrderID, Orders.OrderTitle, Materials.Material, Materials.MaterialCost,
       Labour.HoursTaken, Invoices.InvoiceAmount
  FROM ((Orders INNER JOIN Labour ON Orders.OrderID = Labour.OrderID)
                INNER JOIN Materials ON Orders.OrderID = Materials.OrderID)
 INNER JOIN Invoices ON Orders.OrderID = Invoices.OrderID;

結果:
ここに画像の説明を入力してください

基本的に、各注文の各資料、時間、請求書を合計するクエリが必要です。必要に応じてこのスプレッドシートで作成したものをここで確認できます。
ここに画像の説明を入力してください

明らかに、このSQLは機能しません。これは、内部結合による複数の行のために、図がいたるところにあるためです。

SELECT Orders.OrderID, Orders.OrderTitle, Sum(Materials.MaterialCost) AS SumOfMaterialCost,
       Sum(Labour.HoursTaken) AS SumOfHoursTaken, 
       Sum(Invoices.InvoiceAmount) AS SumOfInvoiceAmount
  FROM ((Orders INNER JOIN Labour ON Orders.OrderID = Labour.OrderID) 
                INNER JOIN Materials ON Orders.OrderID = Materials.OrderID) 
 INNER JOIN Invoices ON Orders.OrderID = Invoices.OrderID
 GROUP BY Orders.OrderID, Orders.OrderTitle;

ここでの結果:
ここに画像の説明を入力してください

複数のSELECTステートメントを見てきましたが、これらはMSAccessでサポートされているとは思いません。

4

1 に答える 1

3

サブクエリはあなたが探しているものを取得します:

SELECT O.OrderID, O.OrderTitle, 
   (SELECT Sum(M.MaterialCost) FROM Materials AS M
    WHERE M.OrderID=O.OrderID) AS SumOfMaterialCost,
   (SELECT Sum(L.HoursTaken) FROM Labour AS L
    WHERE L.OrderID=O.OrderID) AS SumOfHoursTaken, 
   (SELECT Sum(I.InvoiceAmount) FROM Invoices AS I
    WHERE I.OrderID=O.OrderID)  AS SumOfInvoiceAmount
FROM Orders AS O

さらに良い情報については、サブクエリの基本存続するサブクエリを参照してください。

于 2012-10-11T12:37:07.533 に答える