sql >> Database >  >> RDS >> Sqlserver

Ontbrekende maanden opnemen in Groeperen op zoekopdracht

Deze oplossing vereist niet dat u de lijst met maanden die u misschien wilt hard codeert, u hoeft alleen een startdatum en een eventuele einddatum op te geven, en het berekent de maandgrenzen voor u. Het bevat het jaar in de uitvoer zodat het meer dan 12 maanden ondersteunt en zodat uw begin- en einddatum een ​​jaargrens kunnen overschrijden en toch correct kunnen worden geordend en de juiste maand en kan worden weergegeven. jaar.

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. Fout bij toevoegen van stand-by

  2. Hoe kan ik een native SQL-script in JPA/Hibernate uitvoeren?

  3. Hoe kan ik null-waarden opnemen in een MIN of MAX?

  4. Total-Order By Date uitvoeren in SQLite