De COUNT retourneert alleen de COUNT voor de status die hij voor Microsoft vindt. En die zijn Ontkend en Wthdrawn. U moet de query alle statussen geven en de exemplaren van allemaal TELLEN. Degenen die niet verschijnen, blijven in de tabel staan met 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;
Wat dit doet is:
SELECT DISTINCT STATUS
FROM tab1
Hiermee worden alle mogelijke statussen gevonden. Als u een referentietabel heeft met alle mogelijke statussen, kunt u deze nog beter gebruiken in plaats van deze zoekopdracht.
Dan doe je een LEFT JOIN op deze tabel op status en companyName. Op deze manier krijg je alleen een match in STATUS als er een record op tafel ligt. Als dat zo is, voeg je 1 toe aan de SOM, anders voeg je 0 toe.