Mysql CASE语句多列

Mysql CASE语句多列,mysql,case,multiple-columns,Mysql,Case,Multiple Columns,我感兴趣的是制作一个case语句,从两个不同的列中提取值,其中一个列包含计算。。我不知道如何使这项工作,但我会告诉你我到目前为止有什么。我有一列显示项目类型,例如特殊订单项目、非连续项目和正常库存项目。第二列显示现存量-销售订单上的数量,以确定该商品是否有库存。这是我的问题 SELECT ItemID, ItemType, (QuantityOnHand - QuantityonSalesOrders) AS Instock CASE WHEN ItemType = 'SP / OR' THEN

我感兴趣的是制作一个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;

对于这种类型的请求,您必须重用计算或使用子查询。这是因为您提供的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;
或:


如果WHERE子句中使用了基于案例的列,该怎么办?有没有办法通过大量行(即索引)来提高其性能?@watery是的,使用索引有助于提高性能。不过,您必须在您的系统上进行测试。
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