Mysql CASE语句多列

6

我想制作一个案例陈述,从两个不同的列中提取值,其中一个涉及计算。我不确定如何使其工作,但我会向您展示我目前所拥有的。(我有一列显示项目类型,例如特殊订单项目、停产项目和通常存货的项目。第二列显示手头数量-销售订单数量,以确定该项目是否有库存。)以下是我的查询:

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;
1个回答

9

对于这种类型的请求,您要么必须重复使用计算结果,要么使用子查询。原因是您给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

如果在WHERE子句中使用基于案例的列,有没有办法通过索引等方式来提高其在大量行上的性能? - watery
@watery 是的,使用索引可以提高性能。不过你需要在你的系统上进行测试。 - Taryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接