sql >> Databasteknik >  >> RDS >> Sqlserver

Välj räkning med 0 räkning

För att utöka KM:s svar behöver du en datumtabell som är som en siffertabell. Det finns många exempel på webben men här är ett enkelt.

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

Nu har du ett bord

sedan kan du skriva om din fråga enligt följande:

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

Två anteckningar:Du behöver en where-klausul för att specificera din räckvidd. En join på en rollbesättning är inte idealisk. Typen i din datumtabell bör matcha typen i din vanliga tabell.



  1. Lista alla kolumner som refereras till i alla procedurer i alla databaser

  2. Hur man duplicerar scheman i PostgreSQL

  3. Kan inte skapa testfil lägre teststartserver mysql

  4. Först-in-först-ut (FIFU) lagerkostnadsberäkning