Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wählen Sie Zählung mit 0 Zählung

Um die Antwort von KM zu erweitern, benötigen Sie eine Datumstabelle, die einer Zahlentabelle ähnelt. Es gibt viele Beispiele im Internet, aber hier ist ein einfaches.

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

Jetzt haben Sie eine Tabelle

dann können Sie Ihre Abfrage wie folgt umschreiben:

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

Zwei Anmerkungen:Sie benötigen eine where-Klausel, um Ihren Bereich anzugeben. Ein Join bei einer Umwandlung ist nicht ideal. Der Typ in Ihrer Datumstabelle sollte mit dem Typ in Ihrer regulären Tabelle übereinstimmen.