我已经搜索了但在这个问题上没有积极的结果因此问题。我正在编写一个查询,并希望将缺失的值表示为0
我的表格似乎是
id ---- requesteddate ----支柱----状态
1 ----- 12/31/2013 ------ IT ------- 6
2 ----- 2014年1月1日--------- IT ------- 6
3 ----- 2014年1月30日-------- HR ------- 7
我想要的结果是
2013 - IT - 2
2013 - HR - 0
2014 - IT - 1
2014 - HR - 1
我不能让HR 0显示出来。我尝试过COALESCE(count(id
),0)并将该组创建为sub并加入它并没有成功。请帮忙!
答案 0 :(得分:0)
您需要使用CROSS JOIN来获取所有年份/支柱的组合,然后使用LEFT JOIN来返回所有年份/支柱的组合以及仅匹配的请求。如果没有年/支柱的组合,witrequest.id将为空并且不会被计算在内:
SELECT years.`year`, pillars.pillar, COUNT(witrequest.id)
FROM
(SELECT DISTINCT YEAR(requesteddate) AS `year`
FROM witrequest) years
CROSS JOIN
(SELECT DISTINCT pillar
FROM witrequest) pillars
LEFT JOIN witrequest
ON YEAR(witrequest.requesteddate)=years.`year`
AND witrequest.pillar=pillars.pillar
GROUP BY
years.`year`, pillars.pillar