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

शर्त के अनुसार समूह पंक्तियाँ

आप Recursive CTE . का उपयोग कर सकते हैं . मैं कोई बेहतर तरीका नहीं सोच सकता।

;WITH cte
     AS (SELECT *,
                Row_number()OVER(ORDER BY start) rn
         FROM   Yourtable),
     rec_cte
     AS (SELECT *,
                ( [End] - Start ) AS st,
                1                 AS grp
         FROM   cte
         WHERE  rn = 1
         UNION ALL
         SELECT a.*,
                CASE
                  WHEN st + ( a.[End] - a.Start ) >= 500 THEN a.[End] - a.Start
                  ELSE st + ( a.[End] - a.Start )
                END,
                CASE
                  WHEN st + ( a.[End] - a.Start ) >= 500 THEN b.grp + 1
                  ELSE grp
                END
         FROM   cte a
                JOIN rec_cte b
                  ON a.rn = b.rn + 1)
SELECT Min(Start) as Start,
       Max([End]) as [End],
       Max(st) as Quantity
FROM   rec_cte
GROUP  BY grp
OPTION (maxrecursion 0) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में @@ SERVERNAME के ​​साथ स्थानीय सर्वर नाम लौटाएं

  2. एकाधिक तालिकाओं के लिए SQL सर्वर विदेशी कुंजी

  3. एक निर्दिष्ट तिथि से 30 कार्य दिवसों की तारीख की गणना करने के लिए टीएसक्यूएल फ़ंक्शन (एसक्यूएल सर्वर 2005)

  4. डेटाबेस आरेख या तालिकाओं को डिज़ाइन करने के लिए बैकएंड संस्करण समर्थित नहीं है

  5. SQL अद्यतन विदेशी भाषाओं (अरबी) के साथ काम नहीं करता