Sql 对子查询行分组

Sql Group by on subquery rows

我有这个table: ArretProductionJournee(Id, DateArret,HeureDebut,HeureFin,EnumArret) 示例:

DateArret   ||HeureDebut                 ||HeureFin                 ||EnumArret
2020-11-30  ||2020-11-30 14:00:00.000    ||2020-11-30 15:00:00.000  ||PS
2020-11-30  ||2020-11-30 16:00:00.000    ||2020-11-30 17:00:00.000  ||HI

我想对每个 EnumArret 的列中的 datediff(HeureDebut,HeureFin) 求和 所以我 运行 这个查询 :

SELECT ArretProductionJournee.DateArret, 
(select
sum (datediff(minute,ArretProductionJournee.HeureDebut, 
ArretProductionJournee.HeureFin))
where ArretProductionJournee.EnumArret Like 'HI')as HI,

(select
sum (datediff(minute,ArretProductionJournee.HeureDebut, 
ArretProductionJournee.HeureFin))
where ArretProductionJournee.EnumArret Like 'PS') as PS

FROM            dbo.ArretProductionJournee
                where ArretProductionJournee.EnumArret Like 'HI'OR 
                ArretProductionJournee.EnumArret Like 'PS'
group by  ArretProductionJournee.EnumArret, dbo.ArretProductionJournee.DateArret

结果:

DateArret   ||HI   ||   PS
2020-10-30  ||12   ||   NULL
2020-11-30  ||60   ||   NULL
2020-11-30  ||NULL ||   60

我想要的结果是按日期对总和进行分组:

DateArret   ||HI   ||   PS
2020-10-30  ||12   ||   0
2020-11-30  ||60   ||   60

我想你想要条件聚合:

select datearret,
    sum(case when enumarret = 'PS' then datediff(minute, heuredebut, heurefin) else 0 end) ps,
    sum(case when enumarret = 'HI' then datediff(minute, heuredebut, heurefin) else 0 end) hi
from dbo.arretproductionjournee
where enumarret in ('PS', 'HI')
group by datearret