Der COUNT gibt nur den COUNT für den Status zurück, den er für Microsoft findet. Und diese werden verweigert und zurückgezogen. Sie müssen der Abfrage alle Status zuführen und die Vorkommen aller von ihnen ZÄHLEN. Diejenigen, die nicht erscheinen, werden in der Tabelle mit 0 belassen:
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;
Was das bewirkt ist:
SELECT DISTINCT STATUS
FROM tab1
Dies findet alle möglichen Status. Wenn Sie eine Referenztabelle mit allen möglichen Status haben, verwenden Sie sie noch besser anstelle dieser Abfrage.
Dann machen Sie einen LEFT JOIN für diese Tabelle nach Status und Firmenname. Auf diese Weise erhalten Sie nur dann eine Übereinstimmung in STATUS, wenn ein Datensatz in der Tabelle vorhanden ist. Wenn ja, fügen Sie 1 zur SUMME hinzu, andernfalls fügen Sie 0 hinzu.