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. डेटाबेस और स्कीमा के बीच अंतर

  2. SQL सर्वर के sys.dm_sql_referenced_entities() का उदाहरण एक लिंक किए गए सर्वर को संदर्भित करने वाली इकाई को लौटाना

  3. सीलिंग () SQL सर्वर में उदाहरण

  4. SQL सर्वर में त्रुटि और लेनदेन को लागू करना

  5. मैं जावा/जेएसपी में एक एमएस एसक्यूएल सर्वर संग्रहीत प्रक्रिया को कैसे निष्पादित करूं, तालिका डेटा लौटा रहा हूं?