2013-01-09 18 views
5

Sono interessato a creare un'istruzione case che estrae valori da due colonne diverse, una delle quali con un calcolo coinvolto. Non sono sicuro di come farlo funzionare, ma ti mostrerò quello che ho finora. (Ho una colonna che mostra il tipo di articolo, ad esempio articoli di ordine speciale, articoli fuori produzione e articoli normalmente in magazzino e la seconda colonna mostra la quantità a disposizione - quantità sugli ordini di vendita per determinare se l'articolo è disponibile). la mia richiestaMysql CASE statement multiple columns

risposta

8

Per questo tipo di richiesta è necessario riutilizzare il calcolo o utilizzare una sottoquery. Questo perché l'alias che si stanno dando il valore Instock non è disponibile per l'utilizzo all'interno della lista di selezione:

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; 

Oppure:

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

Che cosa succede se la colonna case-based è utilizzata in una clausola WHERE ? Qualche modo per migliorare le sue prestazioni con un sacco di righe (ad esempio gli indici)? – watery

+0

@watery Sì, l'utilizzo degli indici può aiutare con le prestazioni. Dovresti testarlo sul tuo sistema però. – Taryn