我想计算任务为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
正如您在任务栏中看到的那样,有条目1,正在进行的总数为2,已完成为1。 当我执行查询时,当我使用entry1并且状态未保存时我得到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;
现在我只使用任务1,但在我的真实代码中,我还需要在COUNT中包含所有任务和所有状态。 我觉得这很简单,也许我错过了一些东西,请纠正我。 如果你有另一种方式,请让我们知道。
答案 0 :(得分:1)
使用此
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的代码)