在这篇文章(Adding a Query to a Subquery then produces no results)中,@ D-Shih提供了一个很好的解决方案,我想扩展一下。
即使子查询仅找到最后一个,我如何将返回的结果添加到该教师的报告计数中?
我正在尝试解决下面的<???> AS CountOfReports,
行,但是我的SQL技能不是那么出色。
SELECT
t.NAME,
t1.REPORTINGTYPE,
<???> AS CountOfReports, <<<< ****
t1.REPORTINGPERIOD
FROM
teachers AS t
INNER JOIN
(SELECT
*,
(SELECT COUNT(*) FROM REPORTS tt
WHERE tt.TEACHER_ID = t1.TEACHER_ID
AND tt.REPORTINGPERIOD >= t1.REPORTINGPERIOD) rn
FROM
REPORTS t1) AS t1 ON t1.TEACHER_ID = t.id AND rn = 1
ORDER BY
t.NAME
答案 0 :(得分:1)
您可以使用correlated subquery计算计数:
SELECT t.Name,
r.ReportingType,
max(r.ReportingPeriod),
(SELECT count(*)
FROM Reports r2
WHERE r2.Teacher_ID = r.Teacher_ID
) AS Reports
FROM Teachers t
JOIN Reports r ON t.ID = r.Teacher_ID
GROUP BY r.Teacher_ID;
NAME REPORTINGTYPE max(r.ReportingPeriod) Reports -------------- ------------- ---------------------- ---------- Mr John Smith Final 2017-03 3 Ms Janet Smith Draft 2018-07 2