2013-02-06 30 views
11

Tôi đã tự hỏi liệu có cách nào để nhận hai tổng số "đếm" riêng biệt từ một bảng sử dụng một truy vấn không? Tức là, sử dụng một bảng tương tự như sau tôi muốn lấy từng mã (riêng biệt) và hiển thị tổng số trạng thái 'KHÔNG bằng X hoặc D, và sau đó có cột bổ sung cho biết tổng số trạng thái' bằng nhau đến X hoặc D và ngày hủy lớn hơn ngày đã cho (ví dụ: 14 ngày qua).SQL: Nhiều câu lệnh đếm với các tiêu chí khác nhau

Bảng:

Code: Status Cancel_Date 
----------------------------------- 
AAA X  2012-02-01 
AAA 
BBB X  2012-02-01 
AAA D  2012-01-01 
AAA 
BBB  
BBB D  2012-02-01 
BBB X  2012-01-01 

Kết quả mẫu (dựa trên các dữ liệu trên):

Code: TotalNotXorD  TotalXorD 
------------------------------------ 
AAA 2    1 
BBB 1    2 

TotalNotXorD: ví dụ:

select code, count(*) 
from table 
where status not in('X','D') 
group by code 

TotalXorD: ví dụ:

select code, count(*) 
from table 
where status in('X','D') 
    and cancel_date >= '2012-02-01' 
group by code 

Tôi đã xem xét truy vấn phụ, v.v. nhưng dường như tôi không nhận được kết quả mình cần.

Bất kỳ ý tưởng nào?

Cảm ơn.

+0

cơ sở dữ liệu gì bạn đang sử dụng? – Michas

Trả lời

37

SELECT a.code, 
     COALESCE(b.totalNotXorD, 0) totalNotXorD, 
     COALESCE(c.totalXorD, 0) totalXorD, 
FROM (SELECT DISTINCT Code FROM tableName) a 
     LEFT JOIN 
     (
      select code, count(*) totalNotXorD 
      from table 
      where status not in('X','D') 
      group by code 
     ) b ON a.code = b.code 
     LEFT JOIN 
     (
      select code, count(*) totalXorD 
      from table 
      where status in('X','D') 
       and cancel_date >= '2012-02-01' 
      group by code 
     ) c ON a.code = c.code 

hoặc đơn giản là làm CASE

SELECT Code, 
     SUM(CASE WHEN status NOT IN ('X','D') OR status IS NULL THEN 1 ELSE 0 END) TotalNotXorD, 
     SUM(CASE WHEN status IN ('X','D') AND cancel_date >= '2012-02-01' THEN 1 ELSE 0 END) TotalXorD 
FROM tableName 
GROUP BY Code 
+0

Cảm ơn bạn đã trả lời JW. Tôi đã thử nó nhưng tôi nhận được lỗi sau, tương tự như các vấn đề tôi gặp phải: Lỗi: Cột 'trạng thái' không hợp lệ trong danh sách lựa chọn vì nó không được chứa trong hàm tổng hợp hoặc GROUP BY mệnh đề. (Tiểu bang: 37000, Mã gốc: 1FB8) Lỗi: Cột 'trạng thái' không hợp lệ trong danh sách lựa chọn vì nó không được chứa trong hàm tổng hợp hoặc mệnh đề GROUP BY. (Tiểu bang: 37000, Mã gốc: 1FB8) – jj2

+0

xem câu trả lời cập nhật của tôi. bằng cách này, những gì bạn đang sử dụng rdbms? –

+0

xem tại đây để giới thiệu http://www.sqlfiddle.com/#!2/aba2a/2 –

Các vấn đề liên quan