2017-07-20 3 views
1

Ich habe eine Bestellungstabelle mit 4 Spalten. Es gibt drei wichtige Säulen -So subtrahieren Sie zwei Spalten voneinander in SQL (PostgresSQL)

dateordered Orderstatus - entweder „abgeschlossen“ oder „returned“ Aufträge - die Zahl der Aufträge setzen in

ich die Summe jeden Monat abgeschlossenen Aufträge finden möchten, und ziehen Sie die zurück Bestellungen für eine verbleibende Summe pro Monat. Dies ist mein Code so weit:

SELECT date_trunc('month', dateordered), SUM(orders) - (
    SELECT SUM(orders) 
    FROM c_orders 
    WHERE orderstatus = 'returned' 
) 
FROM c_orders 
WHERE orderstatus = 'complete' 
GROUP BY 1 

Ich weiß, dass der Hauptteil der Abfrage funktioniert ordnungsgemäß die fertigen Aufträge von Monat zu ziehen. Das Problem ist die Unterabfrage - ich weiß nicht, wie ich die Summe der zurückgegebenen Bestellungen nach Monat angeben soll. Diese Abfrage subtrahiert jetzt die Summe aller zurückgegebenen Bestellungen im gesamten Datensatz ohne Angabe des Monats.

Gibt es einen besseren Weg, dies zu tun?

TIA
+0

Bearbeiten Sie Ihre Frage und Beispieldaten und die gewünschten Ergebnisse liefern. –

Antwort

3

Ich denke, das ist das, was Sie wollen:

SELECT date_trunc('month', dateordered) as yyyymm, 
     SUM(CASE WHEN orderstatus = 'complete' THEN orders 
       WHEN orderstatus = 'returned' THEN - orders 
       ELSE 0 
      END) 
FROM c_orders 
GROUP BY yyyymm 
ORDER BY yyyymm; 
+0

Danke, das funktioniert perfekt. Bonus q - Wenn ich dann ab August eine prozentuale Wechselberechnung von einem Monat auf den anderen machen möchte, wie könnte ich das machen? – dataelephant

+0

Ich konnte die Antwort in einem Kommentar nicht passen. Bitte posten Sie als neue Frage. – isaach1000

Verwandte Themen