Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

ग्रुप बाय के साथ मिलकर मिमिक ग्रुप_कॉनकैट ()

SELECT [Month] = DATENAME(MONTH, M), Sponsor, Client, c,
  [dates] = STUFF((SELECT ', ' + RTRIM(DATEPART(DAY, [date])) 
    FROM dbo.booking AS b
    WHERE b.Sponsor = x.Sponsor
      AND b.Client = x.Client
      AND b.[date] >= x.M AND b.[date] < DATEADD(MONTH, 1, x.M) 
    ORDER BY [date]
    FOR XML PATH('')), 1, 2, '')
FROM 
(
  SELECT 
      M = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', [date]), '19000101'),
      Sponsor,
      Client,
      COUNT(booking_id) AS c
    FROM dbo.booking
    GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, '19000101', [date]), '19000101'),
      Sponsor,
      Client
) AS x
ORDER BY M, Sponsor, Client;

ध्यान दें कि यदि प्रायोजक/ग्राहक के संयोजन की एक ही दिन में दो बुकिंग हैं, तो सूची में दिन की संख्या दो बार दिखाई देगी।

संपादित करें यहां बताया गया है कि मैंने कैसे परीक्षण किया:

DECLARE @booking TABLE
( 
  booking_id INT IDENTITY(1,1) PRIMARY KEY,
  [date] DATE,
  Sponsor VARCHAR(32),
  Client VARCHAR(32)
);

INSERT @booking([date], Sponsor, Client) VALUES
('20120312','AB','y'), ('20120315','AB','y'), ('20120318','AB','y'),
('20120316','FE','x'), ('20120319','FE','x'), ('20120321','FE','x'), ('20120320','FE','x'),
('20120404','AB','x'), ('20120408','AB','x');

SELECT [Month] = DATENAME(MONTH, M), Sponsor, Client, c,
  [dates] = STUFF((SELECT ', ' + RTRIM(DATEPART(DAY, [date])) 
    FROM @booking AS b
    WHERE b.Sponsor = x.Sponsor
      AND b.Client = x.Client
      AND b.[date] >= x.M AND b.[date] < DATEADD(MONTH, 1, x.M) 
    ORDER BY [date]
    FOR XML PATH('')), 1, 2, '')
FROM 
(
  SELECT 
      M = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', [date]), '19000101'),
      Sponsor,
      Client,
      COUNT(booking_id) AS c
    FROM @booking
    GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, '19000101', [date]), '19000101'), 
      Sponsor, 
      Client
) AS x
ORDER BY M, Sponsor, Client;

परिणाम:

Month   Sponsor Client  c       dates
------- ------- ------- ------- --------------
March   AB      y       3       12, 15, 18
March   FE      x       4       16, 19, 20, 21
April   AB      x       2       4, 8



  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. टी-एसक्यूएल स्थिति के सही नहीं होने पर भी यदि कथन का मूल्यांकन करता प्रतीत होता है

  3. SQL सर्वर 2016:एक डेटाबेस का बैकअप लें

  4. पाइथन या आयरनपीथन के साथ mssql तक पहुंचने का सबसे आसान तरीका क्या है?

  5. IF..ELSE IF का उपयोग करके टी-एसक्यूएल एसपी में नियंत्रण प्रवाह - क्या अन्य तरीके हैं?