Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

tạo tổng hợp nhóm con trong sql dựa trên giá trị cột

Bạn có thể chỉ định một tham số nhóm bằng cách đếm số lượng done các bản ghi trước mỗi bản ghi. Phần còn lại chỉ là tổng hợp, mặc dù việc gán một chữ cái cho mỗi nhóm có vẻ phức tạp không cần thiết:

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;

Truy vấn này sẽ đơn giản hơn (và hiệu quả hơn) trong SQL Server 2012+, hỗ trợ tính tổng tích lũy.

CHỈNH SỬA:

Tôi nhận thấy rằng tôi sử dụng một truy vấn con cho việc này, nhưng điều đó là không cần thiết. Điều này có thể được viết là:

      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. Tham chiếu đến Bí danh cột trong Mệnh đề WHERE

  2. Cách lấy tất cả các Bảng có hoặc không có Ràng buộc khóa chính trong Cơ sở dữ liệu máy chủ Sql - Hướng dẫn sử dụng SQL Server / TSQL 59

  3. Cách sao lưu cơ sở dữ liệu SQL Server bằng T-SQL

  4. Varchar không hợp lệ cho toán tử Sum

  5. Máy chủ SQL CHỌN VÀO @variable?