Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

membuat agregasi subgrup dalam sql berdasarkan nilai kolom

Anda dapat menetapkan parameter pengelompokan dengan menghitung jumlah done catatan sebelum setiap catatan. Sisanya hanya agregasi, meskipun menugaskan surat untuk setiap grup sepertinya tidak perlu rumit:

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;

Kueri ini akan lebih sederhana (dan lebih efisien) di SQL Server 2012+, yang mendukung penjumlahan kumulatif.

EDIT:

Saya perhatikan bahwa saya menggunakan subquery untuk ini, tetapi itu tidak perlu. Ini dapat ditulis sebagai:

      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. Buat Fungsi Bernilai Tabel Multi-Pernyataan (MSTVF) di SQL Server

  2. Cara Menghapus Spasi Putih Terkemuka di SQL Server – LTRIM ()

  3. Cara menemukan nama kolom untuk semua tabel di semua database di SQL Server

  4. Pendekatan terbaik untuk menghapus bagian waktu dari datetime di SQL Server

  5. Kunci Asing SQL Server melintasi batas basis data - teknik untuk penegakan