Ich versuche, eine IF (SELECT) -Anweisung in einer SQL-Abfrage zu implementieren. Die Abfrage sieht wie folgt aus bisher:MYSQL IF (SELECT) -Abfrage gibt mehr als eine Zeile zurück
SELECT *, IFNULL(duree_corrigee,duree) as
duree_final, IF((SELECT COUNT(*) FROM pointage_interval WHERE panier=1
AND pointage_employe_id = 'FH'
AND semaine = 23 GROUP BY date)>=1,
1,0) as panier_final FROM pointage_interval P
JOIN
employe E ON P.pointage_employe_id
= E.employe_id JOIN chantier C
ON C.chantier_id=P.pointage_chantier_id
WHERE (pointage_employe_id = 'FH'
AND semaine = 23)
Wenn ich es laufen, gibt sie mir: # 1242 - Subquery liefert mehr als 1 Zeile
Grundsätzlich kann ich viele Zeilen mit dem gleichen Datum. Eine Spalte ist "panier" und kann entweder 1 oder 0 sein. Ich möchte eine neue Spalte panier_final erstellen, die den Wert 1 oder 0 basierend darauf verwendet, ob mindestens eine Spalte mit dem Wert panier = 1 für dieselbe Spalte vorhanden ist Tag. So erhalten alle Zeilen mit demselben Datum für panier_final den gleichen Wert 1 oder 0.
Wenn ich die Abfrage ohne die IF (SELECT) laufen, da dies:
SELECT *, IFNULL(duree_corrigee,duree) as
duree_final FROM pointage_interval P
JOIN
employe E ON P.pointage_employe_id
= E.employe_id JOIN chantier C
ON C.chantier_id=P.pointage_chantier_id
WHERE (pointage_employe_id = 'FH'
AND semaine = 23)
ich diese Ausgabe:
Wie Sie sehen können, gibt es zwei Reihen für am selben Tag, 2017-06-07. Daher möchte ich, dass meine IF (SELECT) -Abfrage eine neue Spalte (panier_final) für jede Zeile erstellt, wobei der Wert dieser neuen Spalte für die Zeilen des gleichen Datums identisch ist. In diesem Fall wird jede Zeile würde eine neue Spalte panier_final erhalten, wird der Wert 1 für jeden gegebenen Zeitpunkt, da dies zu sein, sind die Werte panier gleich oder höher als 1
entfernen konnte Es funktionierte, danke! – marcvander
Eine weitere Frage, wie bekomme ich die Summe aller Zeilen der neuen Spalte panier_final, gruppiert pro Tag (so dass zwei Zeilen mit dem gleichen Datum mit jedem panier_final = 1 für 1, nicht für 2 zählt)? Ich habe das versucht, aber gibt mir die falsche Summe: (SELECT SUM (panier_final) VON poinage_interval WHERE poinage_employe_id = 'CL' UND semaine = 26 GROUP BY P.date) AS panier_final_total – marcvander