sql >> Databasteknik >  >> RDS >> Sqlserver

Inkludera saknade månader i grupp efter fråga

Den här lösningen kräver inte att du hårdkodar listan över månader du kanske vill ha, allt du behöver göra är att ange vilket startdatum och vilket slutdatum som helst, och den kommer att beräkna månadsgränserna åt dig. Den inkluderar år i utgången så att den kommer att stödja mer än 12 månader och så att dina start- och slutdatum kan passera en årsgräns och fortfarande ordna korrekt och visa rätt månad och år.

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. Hur förfinar man utdata som kommer från SELECT-frågan i kommandotolken?

  2. Skapa och ta bort en PostgreSQL-databas på Ubuntu 16.04

  3. pyodbc - mycket långsam bulkinserthastighet

  4. Sätt som tillgång kan spara pengar för ditt företag