繁体   English   中英

MySQL查询中的嵌套CASE

[英]Nested CASE in MySQL Query

我要计算任务为1到3的订单总数。然后,如果已经计算了entry1,则需要检查状态是否为进行中(所有未完成的状态)。 我在这里需要使用嵌套的CASE,我不想在WHERE子句中包含它,因为稍后我将联接更多的表。

这是我的示例表:

ID  +    orderid  +  task    +  status
1   |    1        |  1       |  Completed
2   |    2        |  1       |  Saved
3   |    3        |  1       |  Saved
4   |    1        |  2       |  Completed
5   |    1        |  3       |  Completed

正如您在具有entry1的任务字段中所看到的那样,进行中的总数为2,已完成的总数为1。当我执行查询时,使用entry1且状态未保存但得到的结果为2,但是我也得到的结​​果2去除NOT时。 但是当我使用(“完成”)时,我得到了正确的结果。 那么我的代码中的('SAVED')有什么问题。 我希望我不要在问题中输入任何错误。

这是我的示例查询:

SELECT 
    COUNT(
        CASE task
            WHEN 1 THEN task ELSE NULL
        END
        AND
        CASE `status`
            WHEN NOT UPPER('SAVED') THEN `status` ELSE NULL
        END
        ) e1_inprogress
   FROM tableName;

现在,我只使用任务1,但是在我的真实代码中,我还需要在COUNT中包括所有任务和所有状态。 我认为这很简单,也许我错过了一些东西,然后请纠正我。 如果您还有其他方法,请告诉我们。

用这个

SELECT 
    COUNT(
        CASE WHEN task = 1 AND Upper(`status`) = 'SAVED' THEN 1 END
        ) e1_inprogress
   FROM tableName;


为什么不起作用?

 WHEN NOT UPPER('SAVED') 

NOT UPPER('SAVED')变为NOT (TRUE)变为FALSE ,因此您将CASE Status与值FALSE进行比较。

您的查询可能是

 CASE Upper(`Status`) WHEN 'SAVED' THEN ... ELSE ... 

(nb:将代码交换为THEN和ELSE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM