[英]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.