COUNT zwraca tylko COUNT dla stanu, który znajduje dla firmy Microsoft. A te są odrzucone i wycofane. Musisz podać w zapytaniu wszystkie statusy i POLICZĆ wystąpienia wszystkich z nich. Te, które nie pojawiają się, zostaną w tabeli pozostawione z 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;
To, co to robi, to:
SELECT DISTINCT STATUS
FROM tab1
Znajduje to wszystkie możliwe statusy. Jeśli masz tabelę referencyjną ze wszystkimi możliwymi statusami, jeszcze lepiej Użyj jej zamiast tego zapytania.
Następnie wykonujesz LEFT JOIN w tej tabeli według statusu i nazwy firmy. W ten sposób otrzymasz dopasowanie w STATUSIE tylko wtedy, gdy na stole znajduje się rekord. Jeśli tak, dodajesz 1 do SUMA, w przeciwnym razie dodajesz 0.