Ich habe zwei Tabellen:MySQL, macht CASE() nur ein Ergebnis zurück, abgestimmt derjenige
agents(id)
agent_targets(agent_id, month, amount)
Für jeden Monat, ich habe ein month
Feld, so zum Beispiel für den Monat Juni 2017 das Feld 2017-05-01
ist .
Jetzt, wenn ich alle Agenten bekomme, muss ich auch ihre monatlichen Ziele für das aktuelle Monat-Jahr erhalten.
Meine Frage ist wie folgt (vereinfacht)
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
Das gibt, was ich erwarte, das Problem ist, dass das Rück mehrere Zeilen ist, von denen alle bis auf einen NULL
sind, weil sie nicht die WHEN
brachte, und eine, die die Menge zurückgeben, die ich brauche.
Aber weil ich dies in einer größeren Abfrage mache, wenn alle Agenten erhalten, brauche ich nur den Datensatz, der die WHEN
entspricht, stattdessen bekomme ich immer ein NULL
Ergebnis, weil es die erste Zeile in der Tabelle ist.
Gibt es eine Möglichkeit, dass ich die CASE
'stoppen' kann, sobald die WHEN
Bedingung erfüllt ist, und nur dieses Ergebnis zurückgeben?
Beachten Sie, dass ich GROUP BY
agent_id
nicht kann, da in der ursprünglichen Abfrage bereits gruppiert wird.
Danke
EDIT/GELÖST Ok, also nach ein bisschen versuchen, schaffte ich es funktioniert. Anstatt die CASE()
mit zog ich einfach die ganze Bedingung in der JOIN
Aussage, so etwas wie diese
[...]
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())
[...]
Ich kann WHERE nicht verwenden, da die ursprüngliche Abfrage viel komplexer ist, aber ich habe es gelöst, indem Sie die Bedingung in der JOIN-Anweisung verschieben –
Das ist das gleiche wie mit einer 'WHERE'-Klausel. – ErikusMaximus
Sie haben Recht, tut mir leid. Ich dachte über die "normale" WHERE-Klausel nach, nicht über die in der JOIN-Anweisung. –