0
Ainsi, la requête d'origine était assez simple.La requête SQL pour renvoyer le nombre de lignes mensuelles est lente
select MONTH(DateColumn), COUNT(DateColumn)
from myTable
where YEAR(DateColumn) = '2014'
group by MONTH(DateColumn)
order by MONTH(DateColumn)
Mais, l'un des mois n'a pas de données, et j'ai besoin d'avoir tous les 12 mois couverts. Donc je suis occupé à retravailler ça ... J'ai une solution, mais c'est douloureusement lent. Il doit y avoir un meilleur moyen.
select o.MonthCount, coalesce(d.total,0) from (
select top 12 ROW_NUMBER() over (order by (select 12)) as MonthCount from myTable
) o outer apply (
select month(e.DateColumn) as mon, COUNT(e.DateColumn) as total
from myTable e
where YEAR(e.DateColumn) = '2013'
and o.monthcount = month(e.DateColumn)
group by MONTH(e.DateColumn)
) d
Awesome! Cela a fonctionné assez bien. Une chose étrange, il peut donner la valeur null pour un nombre, et ni isnull ou coalesce sur le compte (DateColumn) le changera à 0. Mais je devrais pouvoir fixer cela au niveau de l'application. – Caimbul
Ah! attends .. j'ai compris. Je l'ai mis dans la jointure interne gauche au lieu de dans la requête de sélection externe .. Première fois en utilisant cte .. De toute façon thx! (a pris une requête qui était d'environ 3min à 3s ..) – Caimbul
@Caimbul J'ai mis à jour sélectionner une partie de la réponse, c'est ce que vous vouliez dire? 3 minutes à 3 secondes sonne bien. – artm