1
我有兩個表:的MySQL,讓CASE()只返回一個結果,一個匹配
agents(id)
agent_targets(agent_id, month, amount)
對於每個月我有一個month
場,所以例如用於月份June 2017場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
這將返回我的期望,這個問題是返回多行,其中除了一個是NULL
,因爲它不符合WHEN
,和一個返回我需要的金額。
但是,因爲我在獲取所有代理時在更大的查詢中執行此操作,所以我只需要與WHEN
匹配的記錄,而我總是得到NULL
結果,因爲它是表中的第一行。
有沒有什麼辦法可以讓CASE
'stop'一旦滿足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())
[...]
我不能使用WHERE,因爲原來的查詢要複雜得多,但我設法通過移動JOIN語句中的條件來解決它 –
這與使用'WHERE'子句相同。 – ErikusMaximus
你說得對,對不起。我正在考慮'正常的'WHERE子句,而不是JOIN語句中的那個。 –