COUNT chỉ trả về COUNT cho trạng thái mà anh ta tìm thấy cho Microsoft. Và đó là Bị từ chối và Bị rút lại. Bạn phải cung cấp cho truy vấn tất cả các trạng thái và COUNT lần xuất hiện của tất cả chúng. Những cái không xuất hiện trong bảng sẽ được để lại bằng 0:
SELECT a.STATUS,
SUM(CASE
WHEN b.STATUS IS NOT NULL
THEN 1
ELSE 0
END) AS StatusCount
FROM (
SELECT DISTINCT STATUS
FROM tab1
) a
LEFT JOIN tab1 b ON a.STATUS = b.STATUS AND b.CompanyName = 'Microsoft'
GROUP BY a.STATUS;
Điều này có nghĩa là:
SELECT DISTINCT STATUS
FROM tab1
Điều này tìm thấy tất cả các trạng thái có thể. Nếu bạn có một bảng tham chiếu với tất cả các trạng thái có thể, tốt hơn nữa là Sử dụng bảng đó thay vì truy vấn này.
Sau đó, bạn thực hiện THAM GIA TRÁI trên bảng này theo trạng thái và tên công ty. Bằng cách này, bạn sẽ chỉ nhận được một trận đấu ở TRẠNG THÁI nếu có một bản ghi trên bảng. Nếu có, bạn thêm 1 vào SUM, nếu không, bạn thêm 0.