2016-04-20 16 views
1

enter image description hereMySQL - Abfrage mit gruppierten Bedingungen

Hallo,

Ich habe Tabelle mit Zeilen wie das Bild oben, und ich möchte Menge aller Zeilen summieren, aber ich brauche Zeile, in AISLE = POS auszuschließen und QTY < 0 in der gleichen Zeile.

Ich habe einige versuchen zu bekommen, was ich will, aber ich kann nicht Lösung finden:

SELECT 
    ROUND(SUM(QTY), 
    2) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' AND case when AISLE = 'POS' AND QTY > 0 

Ein weiterer Versuch

SELECT 
    ROUND(SUM(QTY), 
    2) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' AND (AISLE = 'POS' AND QTY > 0) 

In diesem speziellen Fall sollte das Ergebnis sein 161.

Lösung

SELECT 
    ROUND(
    SUM(
     CASE WHEN(AISLE = 'POS' AND QTY > 0) OR AISLE != 'POS' THEN QTY ELSE 0 
    END 
), 
    2 
) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' 
+0

Was passiert, wenn Sie laufen Ihren Code? –

Antwort

2

Ich möchte zu beachten, dass

WHERE PRODUCT = 143459 AND 
     AISLE NOT IN ('PHY', 'RET') AND 
     (AISLE <> 'POS' OR QTY > 0) 

Hinweis: NOT IN würde für diese Abfrage hilfreich Dies setzt voraus, dass AISLE i s nie NULL.

Oder alternativ:

WHERE PRODUCT = 143459 AND 
     AISLE NOT IN ('PHY', 'RET') AND 
     NOT (AISLE = 'POS' AND QTY > 0) 
1

Ihre zweite Aussage war fast richtig, aber da Sie versuchen, „AISLE = POS ausschließen“, dann sollte es AISLE <> 'POS' sein:

SELECT 
    ROUND(SUM(QTY), 
    2) AS INVENTORY 
FROM 
    INV_QTY_LOCATION 
WHERE 
    PRODUCT = 143459 AND AISLE != 'PHY' AND AISLE != 'RET' AND (AISLE <> 'POS' OR QTY > 0) 
+0

Das ist nicht gut, denn wenn Zeile mit AISLE = POS> 0 ist, muss ich diese Zeile einschließen. Bei dieser Abfrage wird immer Zeile mit AISLE = POS ausgeschlossen. –

+0

Danke für die Klarstellung, ich habe meine Antwort mit 'AND (AISLE <>' POS 'ODER QTY> 0)' aktualisiert. Aber, Sie sollten [** @ Gordon Linoff ** Antwort] (http://stackoverflow.com/questions/36754667/mysql-query-with-grouped-conditions/36754793#36755078), wie ich denke, es ist besser als meins. –

0

versuchen Sie es mit

AND (AISLE <> 'POS' OR QTY >= 0) 
Verwandte Themen