Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Selecione a contagem com 0 contagem


Expandindo a resposta do KM, você precisa de uma tabela de datas que seja como uma tabela de números. Existem muitos exemplos na web, mas aqui está um simples.
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

Agora você tem uma mesa



então você pode reescrever sua consulta da seguinte forma:
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

Duas notas:você precisará de uma cláusula where para especificar seu intervalo. Uma junção em uma conversão não é ideal. O tipo em sua tabela de datas deve corresponder ao tipo em sua tabela normal.