“这是作品”,但非常缓慢:留在临时表中加入与一年月:
select the_year, the_month--,NbDatesAvecDonnees,NbDatesTheoriques,NbDatesValides, DispoBrute, DispoValide,dispoBruteCorrigee,dispoValideCorrigee
from @months
left join
(
select Annee, Mois,
min(datedebut) as dtDebutPeriode,
SUM(nbDates) as NbDatesAvecDonnees,
sum(NbDatesTheoriques) as NbDatesTheoriques,sum(NbDatesValides) as NbDatesValides,
round(cast(SUM(nbDates) * 100 as float)/sum(NbDatesTheoriques),2) as DispoBrute,
round(cast(SUM(NbDatesValides) * 100 as float)/sum(NbDatesTheoriques),2) as DispoValide,
case when sum(nbDatesMinMax) != sum(NbDatesTheoriques) then round(cast(SUM(nbDates) * 100 as float)/sum(nbDatesMinMax),2) else round(cast(SUM(nbDates) * 100 as float)/sum(NbDatesTheoriques),2) end as dispoBruteCorrigee,
case when sum(nbDatesMinMax) != sum(NbDatesTheoriques) then round(cast(SUM(NbDatesValides) * 100 as float)/sum(nbDatesMinMax),2) else round(cast(SUM(NbDatesValides) * 100 as float)/sum(NbDatesTheoriques),2) end as dispoValideCorrigee
,case when sum(nbDatesMinMax) != sum(NbDatesTheoriques) then 1 else 0 end as erreur
from (
select
dateMin, dateMax, (DATEDIFF(minute, dateMin, dateMax) + 10)/10 as nbDatesMinMax,
dateDebut, dateadd(second, -1 ,DATEADD(month, 1, datedebut)) as datefin, annee, Mois,
(DATEDIFF(minute, datedebut, dateadd(second, -1 ,DATEADD(month, 1, datedebut))) +10)/10 as NbDatesTheoriques , nbDates, NbDatesValides
from (
select
min(dateheuremesure) as dateMin,
max(dateheuremesure) as dateMax,
DATEADD(day,-(datepart(day,(DATEADD(hour,-(datepart(hour,dateadd(minute,-(datepart(minute, min(dateHeureMesure))), min(dateheuremesure)))), dateadd(minute,-(datepart(minute, min(dateHeureMesure))), min(dateheuremesure)))))) + 1,
DATEADD(hour,-(datepart(hour,dateadd(minute,-(datepart(minute, min(dateHeureMesure))), min(dateheuremesure)))), dateadd(minute,-(datepart(minute, min(dateHeureMesure))), min(dateheuremesure))))
as dateDebut,
DATEPART(year, DateHeureMesure) as annee,
DATEPART(month, dateheuremesure) as mois, TypeMesure, HauteurMesure,
count(dateheuremesure) as nbDates,
SUM(CASE WHEN ValideeMesure = 2 THEN 1 ELSE 0 END) AS NbDatesValides
from mesure
where IdCampagneMesure = @IdCampagne and DateHeureMesure between @start_date and @due_date
group by DATEPART(YEAR, DateHeureMesure), DATEPART(month, dateheuremesure), TypeMesure , HauteurMesure
) r group by annee, dateMin,dateMax,dateDebut,mois,nbDates,NbDatesValides) r2 group by annee,mois
)
data on data.annee = the_year and data.mois = the_month
什么是您的DBMS? – Damirchi
使用一个计数表来“正确连接”(或者如果您从计数表开始,则为“左连接”),计数表将只有数字1-12(几个月)。你可以加入月份号码。 – HoneyBadger
SQL Server 2008 R2 – Teetof