MySQL,make CASE()只返回一个结果,匹配一个

时间:2017-05-30 13:46:06

标签: mysql case

我有两张桌子:

agents(id)
agent_targets(agent_id, month, amount)

每个月我都有一个month字段,例如2017年6月的字段为2017-05-01

现在,当我获得所有代理商时,我还需要获得当前月份的月度目标。

我的查询如下(简化)

SELECT 
(CASE
    WHEN MONTH(targets.month) = MONTH(CURRENT_DATE()) AND YEAR(targets.month) = YEAR(CURRENT_DATE())
    THEN targets.amount
END) as monthly_target
FROM agent_targets targets

这会返回我的期望,问题是返回多行,其中除{1}之外的所有行都是NULL,因为它与WHEN不匹配,而且返回我需要的数量

但是因为我在获取所有代理时在更大的查询中执行此操作,所以我只需要与WHEN匹配的记录,而是总是得到NULL结果,因为它是第一行表

一旦满足CASE条件,有什么方法可以让WHEN'停止',并且只返回那个结果?

请注意,我无法GROUP BY agent_id,因为原始查询中已经有分组。

谢谢

修改/解决 好的,经过一番尝试后我设法让它发挥作用。而不是使用CASE()我只是在JOIN语句中移动了整个条件,就像这样

[...]
LEFT JOIN agent_targets targets ON agents.id = targets.agent_id AND MONTH(targets.month) = MONTH(CURRENT_DATE()) AND YEAR(targets.month) = YEAR(CURRENT_DATE())
[...]

1 个答案:

答案 0 :(得分:1)

您应该使用WHERE子句代替CASE