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

SQL Group By - Tạo nhiều cột tổng hợp từ một cột duy nhất

Bạn có thể làm điều đó bằng cách sử dụng các truy vấn con tương quan như sau:

SELECT 
  Company, 
  Date, 
  (SELECT COUNT(*) FROM MyTable AS T1 
     WHERE T1.Flag='Y' AND T1.Company=T2.Company AND T1.Date=T2.Date) AS Count_Y,
  (SELECT COUNT(*) FROM MyTable AS T1 
     WHERE T1.Flag='N' AND T1.Company=T2.Company AND T1.Date=T2.Date) AS Count_N
FROM MyTable AS T2
GROUP BY Company, Date

Bạn cũng có thể làm điều đó ngắn gọn hơn, nhưng có lẽ với (được cho là) ​​khả năng đọc kém hơn một chút khi sử dụng SUM lừa:

SELECT 
  Company, 
  Date, 
  SUM(CASE WHEN Flag='Y' THEN 1 ELSE 0 END) AS Count_Y,
  SUM(CASE WHEN Flag='N' THEN 1 ELSE 0 END) AS Count_N,
FROM MyTable
GROUP BY Company, Date

Trong Oracle / PLSQL, DECODE có thể được sử dụng để thay thế cho CASE để ngắn gọn hơn nữa:

SELECT 
  Company, 
  Date, 
  SUM(DECODE(Flag,'Y',1,0)) AS Count_Y,
  SUM(DECODE(Flag,'N',1,0)) AS Count_N,
FROM MyTable
GROUP BY Company, Date


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lạc bộ các hàng trong các ngày trong tuần

  2. Tổng hợp có thể không xuất hiện trong danh sách tập hợp của một tuyên bố CẬP NHẬT. Nếu cập nhật với Tên cột

  3. Logic báo cáo sổ cái trong quy trình được lưu trữ

  4. Các hàng SQL Server không thể chỉnh sửa cho Access sau khi Chèn

  5. ON [PRIMARY] có nghĩa là gì?