MYSQL IF(SELECT)查询返回多个行
问题描述:
我试图在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)
我得到这样的输出:
正如你可以看到,有两行同一天,2017-06-07。所以我想让我的IF(SELECT)查询为每一行创建一个新列(panier_final),这个新列的值对于每个相同日期的行都是相同的。在这种情况下,每个行会得到一个新列panier_final,因为对于每一个给定的日期,该值帕尼埃为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
它的工作,谢谢! – marcvander
还有一个问题,我怎样才能得到新列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