【问题标题】:Mysql CASE statement multiple columnsMysql CASE 语句多列
【发布时间】:2013-01-09 16:45:16
【问题描述】:

我有兴趣制作一个从两个不同列中提取值的 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;

【问题讨论】:

    标签: mysql case multiple-columns


    【解决方案1】:

    对于这种类型的请求,您要么必须重用计算,要么使用子查询。这是因为您提供的 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 是的,使用索引有助于提高性能。不过,您必须在系统上对其进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多