2017-05-30 128 views
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 BYagent_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

您應該使用的,而不是一個CASE條款WHERE

+0

我不能使用WHERE,因爲原來的查詢要複雜得多,但我設法通過移動JOIN語句中的條件來解決它 –

+0

這與使用'WHERE'子句相同。 – ErikusMaximus

+0

你說得對,對不起。我正在考慮'正常的'WHERE子句,而不是JOIN語句中的那個。 –