COUNT只返回他为Microsoft找到的状态的COUNT。而那些被否决了。您必须向查询提供所有状态,并计数所有状态的出现次数。那些未出现的将在表中保留0:
SELECt a.STATUS, SUM(CASE WHEN b.STATUS IS NOT NULL THEN 1 ELSE 0 END) AS StatusCountFROM ( SELECt DISTINCT STATUS FROM tab1 ) aLEFT JOIN tab1 b ON a.STATUS = b.STATUS AND b.CompanyName = 'Microsoft'GROUP BY a.STATUS;
它的作用是:
SELECt DISTINCT STATUSFROM tab1
这将找到所有可能的状态。如果您有一个包含所有可能状态的参考表,甚至更好,请使用它代替此查询。
然后,您通过状态和companyName在此表上进行LEFT
JOIN。这样,仅当表上有记录时,您才能在STATUS中获得匹配项。如果存在,则将1加到SUM,否则将添加0。
[sqlfiddle demo](http://sqlfiddle.com/#!2/b7cc3/9)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)