Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bao gồm các tháng bị thiếu trong truy vấn Nhóm Theo

Giải pháp này không yêu cầu bạn mã hóa danh sách các tháng bạn có thể muốn, tất cả những gì bạn cần làm là cung cấp bất kỳ ngày bắt đầu và ngày kết thúc nào và nó sẽ tính toán ranh giới tháng cho bạn. Nó bao gồm năm trong đầu ra để nó sẽ hỗ trợ hơn 12 tháng và để ngày bắt đầu và ngày kết thúc của bạn có thể vượt qua ranh giới một năm mà vẫn có thứ tự chính xác và hiển thị đúng tháng năm.

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. Bảo trì theo lịch trình của Cơ sở dữ liệu IS 24/7 trong MS SQL Server

  2. EF5:Không thể đính kèm tệp '{0}' dưới dạng cơ sở dữ liệu '{1}'

  3. OBJECTPROPERTY () so với OBJECTPROPERTYEX () trong SQL Server:Sự khác biệt là gì?

  4. Tạo giá trị int ngẫu nhiên từ 3 đến 6

  5. SQL Server 2016:Sao lưu cơ sở dữ liệu