我正在尝试在SQL查询中实现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行
基本上我可以有许多行具有相同的日期。一列是“panier”,可以是1或0.我想创建一个新的列panier_final,如果存在至少一个值为panier = 1的列,则取值为1或0天。因此,具有相同日期的所有行将获得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)
我得到了这个输出:
如您所见,2017-06-07同一天有两行。所以我希望我的IF(SELECT)查询为每一行创建一个新列(panier_final),这个新列的值对于每个相同日期的行是相同的。在这种情况下,每一行都会得到一个新的列panier_final,值为1,因为每个给定日期的值都是1,值panier等于或高于1
答案 0 :(得分: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