2017-07-27 294 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行

基本上我可以有相同的日期多行。一列是“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) 

我得到这样的输出:

enter image description here

正如你可以看到,有两行同一天,2017-06-07。所以我想让我的IF(SELECT)查询为每一行创建一个新列(panier_final),这个新列的值对于每个相同日期的行都是相同的。在这种情况下,每个行会得到一个新列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

还有一个问题,我怎样才能得到新列panier_final,每天分组的所有行的总和(以便具有相同日期的两行,他们每个panier_final = 1计为1,而不是2)?我尝试过,但给了我错误的总数:(SELECT SUM(panier_final)FROM pointage_interval WHERE pointage_employe_id ='CL' AND semaine = 26 GROUP BY P.date)AS panier_final_total – marcvander