2017-07-27 19 views
0

SQLクエリでIF(SELECT)文を実装しようとしています。クエリは、これまでのようになります。私はそれを実行するとMYSQL IF(SELECT)クエリで複数の行が返される

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) 

、それは私を返します:#1242 - サブクエリは、基本的に私は、同じ日付で多くの行を持つことができます以上の1行

を返します。 1つのカラムは "panier"で、1または0のいずれかになります。panier_finalという新しいカラムを作成したいと思います。日。したがって、同じ日付のすべての行は、panier_finalに対して同じ値1または0を取得します。

私はこのように、IF(SELECT)なしでクエリを実行する場合:

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) 

私はこの出力を得る:

enter image description here

あなたが見ることができるように、のための2つの行があります同じ日、2017-06-07。だから、各行の新しい列(panier_final)を作成するためにIF(SELECT)クエリを使用したいと思います。この新しい列の値は、同じ日付の行ごとに同じです。この場合、各行は新しい列panier_finalになるだろう、それぞれ指定された日付のため、値パニエ1

答えて

1

に等しいか優れていることがので1である値は、サブクエリにこの条件を追加:date = P.date

あなたのサブクエリこのようになります:

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

と私はあなたがそれが働いGROUP BY date

+0

、感謝を取り除くことができると思います! – marcvander

+0

もう1つの質問ですが、1日にグループ化された新しい列panier_finalのすべての行の合計を取得するにはどうしたらよいですか?(同じ日付の2行がpanier_final = 1の場合、私はこれを試みたが、私に間違った合計を与える:(SELECT SUM(panier_final)FROM pointage_interval WHERE pointage_employe_id = 'CL' AND semaine = 26 GROUP BY P.date)AS panier_final_total – marcvander

関連する問題