2012-07-03 3 views
-2

J'ai cette requêteComment afficher la valeur par défaut dans le groupe?

SELECT DATE,COUNT(DATE) FROM TABLE WHERE DATE BETWEEN DATE1 AND DATE2 GROUP BY DATE.. 

Le résultat sera comme (pour la date 1/2/2012 à 3/2/2012 soit 3 dates)

1/2/2012 5 
2/2/2012 6 
3/2/2012 9 

Parfois, si le compte est nul signifie qu'il n'indiquant la date-à-dire

1/2/2012 5 
      If (2/2/2012 is not there) 
3/2/2012 9 

Je veux énumérer toutes les dates. i.e like this

1/2/2012 5 
2/2/2012 0 
3/2/2012 9 

Comment faire?

+0

si vous voulez « ajouter » une date et affiche un nombre nul si ce n'est pas Là? – Sathya

+0

@sathya s correct – shanmugavel

+0

duplicata possible de [Remplir les jours manquants pour les lignes] (http://stackoverflow.com/questions/5421526/filling-in-missing-days-for-rows) –

Répondre

4

Vous pouvez utiliser un CTE pour générer une liste de dates et left join sur ce point:

; with Dates as 
     (
     select cast('2012-01-01' as date) as dt 
     union all 
     select dateadd(day, 1, dt) 
     from Dates 
     where dateadd(day, 1, dt) < '2012-01-06' 
     ) 
select d.dt 
,  count(yt.id) 
from Dates d 
left join  
     YourTable yt 
on  yt.Date = d.Dt 
group by 
     d.dt; 

Live example at SQL Fiddle.

+0

+1, me battre . Peut également utiliser master..spt_values. http://www.sqlfiddle.com/#!3/48be5/2 – StuartLC

Questions connexes