MySQL查询中的嵌套CASE
我想计算任务为1到3的订单总数。 然后,如果entry1已经计算在内,我需要检查状态是否正在进行(所有未完成的状态)。 我需要在这里使用嵌套的CASE,我不想在WHERE子句中包含它 因为我以后会加入更多的表 这是我的示例表:MySQL查询中的嵌套CASE,mysql,Mysql,我想计算任务为1到3的订单总数。 然后,如果entry1已经计算在内,我需要检查状态是否正在进行(所有未完成的状态)。 我需要在这里使用嵌套的CASE,我不想在WHERE子句中包含它 因为我以后会加入更多的表 这是我的示例表: ID + orderid + task + status 1 | 1 | 1 | Completed 2 | 2 | 1 | Saved 3 | 3
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)我现在就知道了。。问题是我认为不应该使用或!=而不是不或。有了你的解释,我会考虑这是我的答案,用你的代码,我会用它代替我来缩短我的查询。再次感谢(我应该先学习基础)