2013-01-09 9 views
5

Ich interessiere mich für eine Case-Anweisung, die Werte aus zwei verschiedenen Spalten zieht, von denen eine mit einer Berechnung beteiligt .. Ich bin mir nicht sicher, wie dies funktioniert, aber ich werde es Ihnen zeigen was ich bisher habe. (Ich habe eine Spalte, die den Artikeltyp anzeigt, z. B. Sonderposten, Auslaufartikel und Artikel, die normalerweise auf Lager sind. Und die zweite Spalte zeigt die Menge - Menge in Kundenaufträgen, um festzustellen, ob der Artikel auf Lager ist.) meine AbfrageMysql CASE-Anweisung mehrere Spalten

Antwort

8

Für diese Art der Anfrage müssen Sie entweder die Berechnung wiederverwenden oder eine Unterabfrage verwenden. Dies liegt daran, das Alias, dass Sie den Instock Wert geben für die Verwendung in der Auswahlliste nicht verfügbar ist:

SELECT ItemID, 
    ItemType, 
    Instock, 
    CASE 
     WHEN ItemType = 'SP/OR' THEN 'Special Order' 
     WHEN Instock < '1' THEN 'Out of Stock' 
     WHEN Instock > '0' THEN 'In Stock' 
    END AS "Stock" 
FROM 
(
    select ItemID, ItemType, (QuantityOnHand - QuantityonSalesOrders) AS Instock 
    from peachtree 
) p; 

Oder:

SELECT ItemID, 
    ItemType, 
    (QuantityOnHand - QuantityonSalesOrders) as Instock, 
    CASE 
     WHEN ItemType = 'SP/OR' THEN 'Special Order' 
     WHEN (QuantityOnHand - QuantityonSalesOrders) < '1' THEN 'Out of Stock' 
     WHEN (QuantityOnHand - QuantityonSalesOrders) > '0' THEN 'In Stock' 
    END AS "Stock" 
FROM peachtree 
+0

Was passiert, wenn die fallbasierte Spalte in einer WHERE-Klausel verwendet wird, ? Jeder Weg, um seine Leistung mit vielen Zeilen (d. H. Indizes) zu verbessern? – watery

+0

@watery Ja, die Verwendung von Indizes könnte bei der Leistung helfen. Sie müssten es jedoch auf Ihrem System testen. – Taryn

Verwandte Themen