Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询中的嵌套CASE_Mysql - Fatal编程技术网

MySQL查询中的嵌套CASE

MySQL查询中的嵌套CASE,mysql,Mysql,我想计算任务为1到3的订单总数。 然后,如果entry1已经计算在内,我需要检查状态是否正在进行(所有未完成的状态)。 我需要在这里使用嵌套的CASE,我不想在WHERE子句中包含它 因为我以后会加入更多的表 这是我的示例表: ID + orderid + task + status 1 | 1 | 1 | Completed 2 | 2 | 1 | Saved 3 | 3

我想计算任务为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并且状态为not Saved时,我得到的结果是2,但当删除not时,我也得到的结果是2。但是当我使用('COMPLETED')时,我得到了正确的结果。那么,我的代码中的('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;
现在我只使用Task1,但在我的实际代码中,我还需要将所有task和所有status包含在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
,因此您正在将
案例状态
与值
FALSE
进行比较

你的问题可能是

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

(注意:将代码替换为THEN和ELSE)

我现在就知道了。。问题是我认为不应该使用或!=而不是不或。有了你的解释,我会考虑这是我的答案,用你的代码,我会用它代替我来缩短我的查询。再次感谢(我应该先学习基础)