Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Seleziona conteggio con 0 conteggio

Espandendo la risposta di KM, hai bisogno di una tabella delle date che sia come una tabella di numeri. Ci sono molti esempi sul web, ma eccone uno semplice.

CREATE TABLE DateList (
 DateValue DATE,
 CONSTRAINT PK_DateList PRIMARY KEY CLUSTERED (DateValue)
 )
 GO
 -- Insert dates from 01/01/2015 and 12/31/2015
 DECLARE @StartDate DATE = '01/01/2015'
 DECLARE @EndDatePlus1 DATE = '01/01/2016'
 DECLARE @CurrentDate DATE = @StartDate

 WHILE @EndDatePlus1 > @CurrentDate
    BEGIN
    INSERT INTO DateList VALUES (@CurrentDate)
    SET @CurrentDate = DATEADD(dd,1,@CurrentDate)
    END

Ora hai un tavolo

quindi puoi riscrivere la tua query come segue:

SELECT top (5)  DateValue, isnull(Count(id),0) as Counted
FROM DateList 
LEFT OUTER JOIN Table
  on DateValue = CAST(Created AS DATE) 
GROUP BY DateValue
order by DateValue desc

Due note:avrai bisogno di una clausola where per specificare il tuo intervallo. Un join su un cast non è l'ideale. Il tipo nella tabella delle date dovrebbe corrispondere al tipo nella tabella normale.