2010-02-20 4 views
5

Ich erhalte einige grundlegende Rechnungsinformationen in einer SQL-Abfrage und die Summe von Auftragssumme und Zahlung in derselben Abfrage. Hier ist, was ich bis jetzt habe:Verwenden mehrerer Verknüpfungen. SUM() produziert falschen Wert

Alles kommt wunderbar aus der Abfrage außer der TotalPayments Spalte. Es gibt eine Zahlung in der Datenbank mit dem Wert (10.00). Der von der Abfrage bereitgestellte Wert beträgt 20,00 (genau doppelt). Meine Theorie ist, dass die Abfrage aus irgendeinem Grund die Zahlungsbetragsspalte zweimal summiert. Kann mir das jemand etwas näher bringen?

Danke für die Hilfe!

+0

Hallo, und willkommen zu StackOverflow. Um Code wie SQL zu formatieren, wählen Sie ihn aus und drücken Sie Strg + K. Dadurch wird der Block um 4 Leerzeichen eingerückt, was von den Skripten auf dieser Seite als Code interpretiert wird und entsprechend neu formatiert wird. –

Antwort

18

Wenn Sie die Abfrage ohne eine group by ausführen, sehen Sie, dass einige Zahlungen mehrere Zeilen haben. Das liegt daran, dass Sie auch Bestellpositionen beitreten. Die Ergebnismenge enthält eine Zeile für jede Kombination aus Bestellposition und Zahlung.

Eine Lösung wäre, um die Summe zu ändern:

, <earlier columns>  
, ( select SUM(payments.amount) 
     from payments 
     where payments.orderID = orders.id 
    ) AS totalPayments 
, <later columns> 

Dies würde die Zahlungen mit mehreren Ordern sicherzustellen, nicht mehrfach summieren.

+0

Macht viel Sinn! Danke für die schnelle Antwort +1! –

+0

Ich denke, das hat gerade meinen Tag gerettet –

+0

+1! zur Erklärung, was das Problem verursacht. – mandza

0

meine Schätzung ist, dass die Zahlung $ 10 ist und es gibt zwei Elemente in der Reihenfolge (orderitems Tabelle). Wenn das der Fall ist, versuchen Sie es mit einem GROUP BY in den Feldern orders/customers/orderstatus.