2013-01-09 11 views
5

Jestem zainteresowany tworzeniem oświadczenia o przypadkach, które ściąga wartości z dwóch różnych kolumn, z których jedna wymaga obliczeń .. Nie jestem pewien jak to zrobić, ale pokażę ci co mam do tej pory. (Mam jedną kolumnę, która pokazuje Typ Przedmiotu, na przykład Elementy zamówienia specjalnego, Przedmioty wycofane i Pozycje, które są zwykle magazynowane, a Druga kolumna pokazuje Ilość pod ręką - Ilość w zamówieniach sprzedaży w celu ustalenia, czy przedmiot jest na stanie). moje zapytanieMysql CASE statement wiele kolumn

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

Odpowiedz

8

dla tego rodzaju wniosek będzie trzeba albo ponowne obliczenie lub użyć podzapytania. To dlatego, że alias że dajesz wartość Instock nie jest dostępny do użytku w liście wyboru:

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; 

czyli

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

Co jeśli kolumna przypadek oparte jest używany w klauzuli WHERE ? Jakikolwiek sposób poprawić wydajność za pomocą wielu wierszy (tj. Indeksów)? – watery

+0

@watery Tak, używanie indeksów może pomóc w osiąganiu wyników. Musisz jednak przetestować go w swoim systemie. – Taryn