SQL обычно имеет проблему с возвратом значений, которые не в таблице.Для этого (в любом случае без хранимой процедуры) вам понадобится еще одна таблица, содержащая пропущенные значения.
Предполагая, что вы хотите одну строку для комбинации проекта / финансового года, вам понадобится таблицакоторый содержит каждую действительную комбинацию Project, Finanical_Year:
SELECT HR.Project, HR.Financial_Year, COUNT(HR.Risk_1) AS HighRiskCount
INTO #HighRisk HR RIGHT OUTER JOIN ProjectYears PY
ON HR.Project = PY.Project AND HR.Financial_Year = PY.Financial_Year
FROM #TempRisk1
WHERE Risk_1 = 3
GROUP BY HR.Project, HR.Financial_Year
Обратите внимание, что мы пользуемся тем фактом, что COUNT () будет считать только ненулевые значения, чтобы получить результат 0 COUNT для этих записей набора результатовкоторые состоят только из данных из новой таблицы ProjectYears.
В качестве альтернативы вы можете вернуть только одну запись с 0 счетами на проект (или, может быть, одну на financial_year).Вы должны изменить приведенное выше решение так, чтобы таблица JOINed содержала только один столбец.