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

Включете липсващите месеци в заявката за група по

Това решение не изисква от вас да кодирате твърдо списъка с месеци, които може да искате, всичко, което трябва да направите, е да предоставите всяка начална и крайна дата и то ще изчисли границите на месеца вместо вас. Той включва година в изхода, така че да поддържа повече от 12 месеца и така, че началната и крайната ви дата да могат да преминат границата на годината и пак да подреждат правилно и да показват правилния месец и година.

DECLARE @StartDate SMALLDATETIME, @EndDate SMALLDATETIME;

SELECT @StartDate = '20120101', @EndDate = '20120630';

;WITH d(d) AS 
(
  SELECT DATEADD(MONTH, n, DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDate), 0))
  FROM ( SELECT TOP (DATEDIFF(MONTH, @StartDate, @EndDate) + 1) 
    n = ROW_NUMBER() OVER (ORDER BY [object_id]) - 1
    FROM sys.all_objects ORDER BY [object_id] ) AS n
)
SELECT 
  [Month]    = DATENAME(MONTH, d.d), 
  [Year]     = YEAR(d.d), 
  OrderCount = COUNT(o.OrderNumber) 
FROM d LEFT OUTER JOIN dbo.OrderTable AS o
  ON o.OrderDate >= d.d
  AND o.OrderDate < DATEADD(MONTH, 1, d.d)
GROUP BY d.d
ORDER BY d.d;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как OBJECTPROPERTYEX() работи в SQL Server

  2. Как да стартирам съхранена процедура в sql сървър на всеки час?

  3. Внедряване на релация едно към нула или едно в SQL Server

  4. Изтриване на пощенски профил на база данни (SSMS)

  5. Въведение в SQL Server