我需要根据四个表中的数据生成一个结果表。
这些表是'users'、'departments'、'report_info'、'report_eval'。基本上,创建一个关于用户的报告,并与报告的一些基本信息一起存储在“report_info”中,例如:
报告信息:
report_id
uid
report_date
report_title
...
评估用户报告时,它会保存在“report_eval”中
报告评估:
id
report_id
report
grade
报告的等级可以是四个字母 A、B、C、D 之一
每个用户都属于一个部门。用户的表看起来像:
用户:
uid
forename
surname
dept_id
...
部门表如下所示:
dept_id
dept_name
我需要生成一个结果列表,显示每个级别的所有部门的每个级别的金额等级。一个例子是:
Department | A | B | C | D
----------------------------
Finance | 0 | 1 | 0 | 3
Sales | 6 | 2 | 3 | 1
Admin | 0 | 0 | 0 | 0
...
等等
到目前为止,我的查询如下,但没有给出预期的结果:
SELECT
d.dept_id,
d.dept_name,
COUNT(NULLIF(re.grade, 'A')) AS gradeA,
COUNT(NULLIF(re.grade, 'B')) AS gradeB,
COUNT(NULLIF(re.grade, 'C')) AS gradeC,
COUNT(NULLIF(re.grade, 'D')) AS gradeD
FROM report_eval re
JOIN report_info ri ON ri.report_id=re.report_id
JOIN users u ON u.uid=ri.uid
RIGHT JOIN departments d ON d.dept_id=u.uid
GROUP BY d.dept_id
我的查询结果列出了所有部门,但是,所有成绩计数都设置为零。
希望这一切都有意义。任何人都可以调整我的查询以将我指向正确的方向。
非常感谢所有帮助。提前致谢。
编辑 1
@peterm 要求的 SQL Fiddle:
http://sqlfiddle.com/#!2/c1f81/2
编辑 2
刚刚意识到;如果一个部门没有值,@Meherzad 的答案就不能完全起作用,那么它就不会列出它们。抱歉,如果最初的问题不清楚,但我需要显示空值。
编辑 3 - 回答 @Meherzad 的回答和我的初始查询的改编产生了正确的结果。感谢@Meherzad。这是最新的 SQL Fiddle:http ://sqlfiddle.com/#!2/73015/1