2017-07-27 4 views
0

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:

enter image description here

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

Antwort

1

diese Bedingung zu Ihrer Unterabfrage hinzu: date = P.date

Ihre subquery wird wie folgt sein:

SELECT COUNT(*) FROM pointage_interval WHERE panier=1 
AND pointage_employe_id = 'FH' AND date = P.date 
AND semaine = 23 GROUP BY date 

und ich denke, Sie GROUP BY date

+0

entfernen konnte Es funktionierte, danke! – marcvander

+0

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

Verwandte Themen