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

स्तंभ मान के आधार पर sql में उपसमूह एकत्रीकरण करना

आप done . की संख्या की गणना करके समूहीकरण पैरामीटर असाइन कर सकते हैं प्रत्येक रिकॉर्ड से पहले रिकॉर्ड। बाकी सब सिर्फ एकत्रीकरण है, हालांकि प्रत्येक समूह के लिए एक पत्र निर्दिष्ट करना अनावश्यक जटिलता जैसा लगता है:

select grp as record, min(Date) as DateBegin,
       max(case when Action = 'Done' then Date end) as DateEnd,
       count(*) as NumActions,
       sum(case when Action = 'Escalation' then 1 else 0 end) as NumEscalations
from (select e.*, coalesce(e2.grp, 0) as grp
      from example e outer apply
           (select count(*) as grp
            from example e2
            where e2.id < e.id and e2.Action = 'Done'
           ) e2
     ) e
group by grp;

SQL सर्वर 2012+ में यह क्वेरी सरल (और अधिक कुशल) होगी, जो संचयी रकम का समर्थन करती है।

संपादित करें:

मैंने देखा है कि मैं इसके लिए एक सबक्वायरी का उपयोग करता हूं, लेकिन यह आवश्यक नहीं है। इसे इस प्रकार लिखा जा सकता है:

      select coalesce(grp, 0) as record, min(Date) as DateBegin,
             max(case when Action = 'Done' then Date end) as DateEnd,
             count(*) as NumActions,
             sum(case when Action = 'Escalation' then 1 else 0 end) as NumEscalations
      from example e outer apply
           (select count(*) as grp
            from example e2
            where e2.id < e.id and e2.Action = 'Done'
           ) e2
      group by e2.grp


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET 4:वेब में अन्य असेंबली में ईडीएमएक्स फ़ाइल को कैसे कॉन्फ़िगर करें

  2. SQL सर्वर 2008 में PIVOT का उपयोग करना

  3. SQL सर्वर के लिए Linux पर चल रहे एप्लिकेशन को Amazon रिलेशनल डेटाबेस सर्विसेज (RDS) से कनेक्ट करना

  4. SQL सर्वर 2008 से XML को कैसे वापस करें जो एक सामान्य माता-पिता को साझा करने वाले कई चयनों के साथ संरचित है

  5. SQL सर्वर संग्रह सूची स्क्रिप्ट -1