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

Vælg tæller med 0 tæller

I forlængelse af KM's svar har du brug for en datotabel, der er ligesom en taltabel. Der er mange eksempler på nettet, men her er et simpelt.

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 et bord

så kan du omskrive din forespørgsel som følger:

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

To noter:Du skal bruge en where-klausul for at specificere dit område. En join på en rollebesætning er ikke ideel. Typen i din datotabel skal matche typen i din almindelige tabel.



  1. Vælg kolonnenavne, hvis indtastninger ikke er nul

  2. Magento Mass Importer billeder med MAGMI - billeder undtaget

  3. Listekolonnenavn for brugervisninger i Oracle

  4. Hvordan vælger man en streng mellem to strenge i en kolonne i SQL Server?