问题描述
我正在尝试执行子选择查询,但我的组中有空值
SELECT convert(varchar,dbo.ArretProductionJournee.DateArret,3),(select
sum (datediff(minute,ArretProductionJournee.HeureDebut,ArretProductionJournee.HeureFin) )
where ArretProductionJournee.EnumArret Like 'HH')
as HH,ArretProductionJournee.HeureFin) )
where ArretProductionJournee.EnumArret Like 'HI')
as HI,ArretProductionJournee.HeureFin) )
where ArretProductionJournee.EnumArret Like 'PS')
as PS
FROM
dbo.ArretProductionJournee
where dbo.ArretProductionJournee.DateArret BETWEEN '01/04/2021'and '03/04/2021'
group by ArretProductionJournee.EnumArret,convert(varchar,3)
结果如下:
我想删除那些空值以获得如下结果:
---------------------------
Date Arrêt | HH | HI | PS |
---------------------------
03 / 02/ 21| 0 | 29 | 45 |
解决方法
我很确定您只想要条件聚合:
select convert(date,dbo.ArretProductionJournee.DateArret),sum(case when apj.EnumArret = 'HH'
then datediff(minute,apj.HeureDebut,apj.HeureFin)
end) as HH,sum(case when apj.EnumArret = 'HI'
then datediff(minute,apj.HeureFin)
end) as HI,sum(case when apj.EnumArret = 'PS'
then datediff(minute,apj.HeureFin)
end) as PS
from dbo.ArretProductionJournee apj
where apj.DateArret between '2021-04-01' and '2021-04-03'
group by convert(date,apj.DateArret);
,
我猜你不需要那些子选择。请改用条件聚合。试试这个。
SELECT CONVERT(varchar,DateArret,3),SUM(IIF(EnumArret Like 'HH',datediff(minute,HeureDebut,HeureFin,0)) AS HH,SUM(IIF(EnumArret Like 'HI',0)) AS HI,SUM(IIF(EnumArret Like 'PS',0)) AS PS,FROM dbo.ArretProductionJournee
WHERE DateArret BETWEEN '01/04/2021'and '03/04/2021'
GROUP BY CONVERT(varchar,3)
它被称为条件聚合,因为每个 SUM(IIF(condition,val,0))
项目只添加与条件匹配的行。
我从您的列名中删除了表名(ArretProductionJournee.HeureDebut
变成了 HeureDebut
),因为您只使用了一个表,而且这样查询更容易阅读。