Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изберете брой с 0 брой

Разширявайки отговора на KM, имате нужда от таблица с дати, която е като таблица с числа. В мрежата има много примери, но ето един прост.

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

Сега имате таблица

тогава можете да пренапишете вашата заявка, както следва:

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

Две бележки:Ще ви е необходима клауза where, за да посочите диапазона си. Присъединяването към каст не е идеално. Типът във вашата таблица с дати трябва да съвпада с типа във вашата обикновена таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ODBC заявка на MS SQL Server, връщаща първите 255 знака само в PHP PDO (FreeTDS)

  2. Свързване на UWP приложение към доставчик на отдалечен SQL Server 2008:TCP доставчик, грешка:0

  3. Кои са най-добрите инструменти за контрол на версиите на Sql Server

  4. Как да разбера коя колона предизвиква грешка при аритметично препълване при вмъкване?

  5. sp_dropserver и sp_addserver не работят