sql >> Databáze >  >> RDS >> Sqlserver

Zahrnout chybějící měsíce do dotazu Seskupit podle

Toto řešení nevyžaduje, abyste napevno zakódovali seznam měsíců, které byste mohli chtít, vše, co musíte udělat, je zadat jakékoli počáteční datum a jakékoli koncové datum a vypočítá hranice měsíce za vás. Zahrnuje rok do výstupu, takže bude podporovat více než 12 měsíců a aby data zahájení a ukončení mohla překročit hranici roku a přesto správně objednávat a zobrazovat správný měsíc a rok.

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. SqlDependency nespustí událost OnChange, když se změní datová sada

  2. Rozdíl mezi datovým typem DECIMAL a NUMERIC v PSQL

  3. jak vložit aktuální datum do pole DATE ve formátu dd/mm/rrrr v oracle

  4. Jak funguje UTC_TIMESTAMP() v MariaDB