2012-10-11 6 views
5

Ich habe eine gute 20 Minuten Suche nach ähnlichen Fragen beantwortet verbrachte aber die meisten sind nicht für MS Access-Datenbanken angegeben.Mehrere Innere Verknüpfungen mit MS Access mehrere Ergebnisse und .. müssen die Gruppierung und insgesamt

meine Erfahrung von SQL Leider ist sehr begrenzt, so würde ich Ihre Eingabe auf diese zu schätzen wissen.

Sie können die Access-Datenbank von diesem Link herunterladen hier, um zu sehen, was ich versuche TestDB.zip zu erreichen.

Dieses Bild zeigt eine sehr einfache Tabelle Setup als Beispiel in MS Access 2003 von dem, was ich erreichen will:
enter image description here

Grundsätzlich würde Ich mag eine SQL-Abfrage ausführen, die die Aufträge angezeigt werden mit allen Informationen in den zugehörigen Tabellen.

Offensichtlich eine SQL-Abfrage, wie die unter mehreren Zeilen mit wiederholten Informationen angezeigt werden, die nicht das, was ich will.

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; 

Ergebnisse:
enter image description here

Grundsätzlich würde ich eine Abfrage wie die jedes der Materialien, Stunden und Rechnungen für jede Bestellung summieren wird. Etwas, das ich in dieser Tabelle nach Wunsch hergestellt haben, können Sie hier sehen:
enter image description here

Offensichtlich ist diese SQL funktioniert nicht, weil die Zahlen alle über den Ort aufgrund der mehreren Reihen sind aufgrund der inneren Joins.

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; 

Ergebnisse hier:
enter image description here

Ich habe an mehreren SELECT-Anweisungen gesucht, aber ich glaube nicht, dass diese in MS Access unterstützt werden

+0

Es wäre einfacher/bevorzugt, die Tabellenstrukturen, Beispieldaten und Abfrageergebnisse hier statt in einer ZIP-Datei an anderer Stelle gespeichert zu veröffentlichen. Wenn die .zip-Dateiverbindung immer fehlschlägt, fehlen diese Informationen und machen diese Frage schwierig zu verstehen. – Taryn

+0

Nicht nur das, aber Sie vorher diese Frage geschrieben und gelöscht es dann [hier] (http://stackoverflow.com/questions/12819833/multiple-inner-joins-with-ms-access-producing-multiple-results-need (Gruppierung) (nur 10k +). Wenn Sie keine Antwort auf eine Frage erhalten, prüfen Sie, ob Sie eine neue Frage nicht erneut stellen. – Taryn

+0

Ich habe die ZIP-Datei mit dem Beispiel Access DB und Tabellenstruktur mit dieser neuen Einreichung veröffentlicht. Ich habe den alten Beitrag gelöscht und erneut gesendet, um die Leute hoffentlich nicht mit zwei Beiträgen zu verwirren. – user1734790

Antwort

3

Subqueries erhalten Sie, was Sie suchen :

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 

Subquery Basics und Surviving Subqueries für einige Siehe mehr gute Infos.

+0

Ohhhh das ist fast da .... Ich habe den SQL-Code eingegeben, hit run und ich werde aufgefordert, einen Parameterwert einzugeben. Wenn ich den Teil von der obersten Zeile entferne ich die Höhe erhalten, die GREAT arbeitet SELECT (SELECT Sum (M.MaterialCost) aus Materialien AS M WHERE M.OrderID = O.OrderID) AS SumOfMaterialCost, (SELECT SUM (L.HoursTaken) von der Arbeit AS L WHERE L.OrderID = O.OrderID) AS SumOfHoursTaken, (SELECT SUM (I.InvoiceAmount) FROM Rechnungen AS I WHERE I.OrderID = O.OrderID) AS SumOfInvoiceAmount FROM Orders AS O' ... aber ich brauche zumindest noch die Bestellnummer zur Referenz von. – user1734790

+0

Es ist OK. Ich habe es behoben, indem ich die "SELECT Orders.OrderID, Orders.OrderTitle" auf "SELECT O.OrderID, O.OrderTitle" gesetzt habe. Vielen Dank für deine Hilfe. Es wird massiv geschätzt! – user1734790

+0

Entschuldigung. Ich habe meine Antwort für zukünftige Benutzer entsprechend aktualisiert. – mwolfe02

Verwandte Themen