我有两张桌子:
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())
[...]
答案 0 :(得分:1)
您应该使用WHERE
子句代替CASE
。