2013-01-09 148 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