2013-01-09 149 views
5

我有興趣做一個case語句,它從兩個不同的列中提取值,其中一個涉及計算。我不確定如何使這項工作,但我會告訴你我到目前爲止。 (我有一列顯示項目類型,例如特殊訂單項目,已停產項目和通常庫存的項目,第二列顯示手頭的數量 - 銷售訂單的數量以確定項目是否有庫存。我的查詢Mysql CASE語句多列

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; 

回答

8

對於這種類型的請求,你將不得不重用計算或使用子查詢。這是因爲你給的Instock值別名不可用於選擇列表中使用:

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; 

或者:

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

如果基於案例的列在WHERE子句中使用了什麼?任何通過大量行(即索引)提高性能的方法? – watery

+0

@watery是的,使用索引可以提高性能。你必須在你的系統上測試它。 – Taryn