ala*_*dey 4 sql t-sql sql-server aggregate-functions
我有这段代码:
SELECT Project, Financial_Year, COUNT(*) AS HighRiskCount
INTO #HighRisk
FROM #TempRisk1
WHERE Risk_1 = 3
GROUP BY Project, Financial_Year
Run Code Online (Sandbox Code Playgroud)
当计数为零时,它不会返回任何行.如何在HighRiskCount设置为0的情况下显示这些行?
当行计数为0时,您无法从表中选择值.在哪里可以获得不存在的行的值?
为此,您必须有另一个表来定义有效值Project和Financial_Year值列表.然后,您将从此表中进行选择,left join在现有表上执行a ,然后进行分组.
像这样的东西:
SELECT l.Project, l.Financial_Year, COUNT(t.Project) AS HighRiskCount
INTO #HighRisk
FROM MasterRiskList l
left join #TempRisk1 t on t.Project = l.Project and t.Financial_Year = l.Financial_Year
WHERE t.Risk_1 = 3
GROUP BY l.Project, l.Financial_Year
Run Code Online (Sandbox Code Playgroud)
将您的SELECT查询包装在一个ISNULL:
SELECT ISNULL((SELECT Project, Financial_Year, COUNT(*) AS hrc
INTO #HighRisk
FROM #TempRisk1
WHERE Risk_1 = 3
GROUP BY Project, Financial_Year),0) AS HighRiskCount
Run Code Online (Sandbox Code Playgroud)
如果您SELECT返回一个数字,它将通过。如果它返回NULL,0将通过。
假设您有您的“项目”和“财务年”,其中 Risk_1 与 3 不同,而这些是您打算包括的。
SELECT Project, Financial_Year, SUM(CASE WHEN RISK_1 = 3 THEN 1 ELSE 0 END) AS HighRiskCount
INTO #HighRisk
FROM #TempRisk1
GROUP BY Project, Financial_Year
Run Code Online (Sandbox Code Playgroud)
注意我删除了 where 部分。
顺便说一下,您当前的查询没有返回 null,它没有返回任何行。
Jer*_*ins -1
SELECT Project, Financial_Year, ISNULL(COUNT(*), 0) AS HighRiskCount
INTO #HighRisk
FROM #TempRisk1
WHERE Risk_1 = 3
GROUP BY Project, Financial_Year
Run Code Online (Sandbox Code Playgroud)