问题:
我正在尝试在 VBA (Excel) 中执行包含使用 SUM 的计算的查询,例如
从 y 中选择 SUM(field1) - SUM(field2) 作为“newField”
。
如果没有 null 值或空字段,则代码可以完美运行,但是一旦 field1 或 field2 中有一个 null/空值,就会返回空白。
因此,如果 SUM(field1) = 17 且 SUM(field2) = null
我希望看到查询返回 17
而不是空白值。
代码:
Public Function GetRiskRecords(ByVal strPrgNo As String) As Variant
Dim strSQL As String
strSQL = "Select [tblRiskMitigating$].RiskID, [tblRiskMitigating$].Program_No, [tblRiskMain$].RiskID, [tblRiskMain$].Program_No, [tblRiskMain$].Department, [tblRiskMain$].DateAdded, [tblRiskMain$].OwnerID, [tblRiskMain$].Description, " _
& " [tblRiskMain$].RiskTo, [tblRiskMain$].Probability, " _
& " Sum([tblRiskMain$].ScheduleImpact) - Sum([tblRiskMitigating$].ScheduleReduction) as 'NewScheduleImpact', " _
& " Sum([tblRiskMain$].CostImpact) - Sum([tblRiskMitigating$].CostReduction) as 'NewCostImpact'" _
& " From [tblRiskMain$]" _
& " Left Join [tblRiskMitigating$] on [tblRiskMain$].RiskID = [tblRiskMitigating$].RiskID AND [tblRiskMain$].Program_No = [tblRiskMitigating$].Program_No" _
& " Where [tblRiskMain$].Program_No = '" & strPrgNo & "'" _
& " Group By [tblRiskMitigating$].RiskID, [tblRiskMitigating$].Program_No, [tblRiskMain$].RiskID, [tblRiskMain$].Program_No, [tblRiskMain$].Department, [tblRiskMain$].DateAdded, [tblRiskMain$].OwnerID, [tblRiskMain$].Description, " _
& " [tblRiskMain$].RiskTo, [tblRiskMain$].Probability"
Call Open_Conn(strDb)
Call Open_RS(strSQL)
If rs.EOF Then
Debug.Print ("Error: no records")
Else
GetRiskRecords = rs.GetRows
End If
Call Close_RS
Call Close_Conn
End Function
背景:
我做了一些挖掘,并尝试在开始时添加 isnull 和 iif,但我根本无法让它们工作(所以我从问题中省略了它们,以减少混淆我原来的(主要)问题)。
最佳答案
您可以使用ISNULL/COALESCE
:
Select SUM(ISNULL(field1,0)) - SUM(ISNULL(field2,0)) as 'newField'
from y;
或者甚至合并为一个SUM
:
Select SUM(ISNULL(field1,0) - ISNULL(field2,0)) as 'newField'
from y;
如果ISNULL/COALESCE
可以轻松地与CASE WHEN
或IIF
互换(SQL Server 2012+
) :
CASE WHEN field1 IS NULL THEN 0
ELSE field1
END;
IIF(field1 IS NULL, 0, field1);
编辑:
上面的代码是面向SQL Server
的,对于EXCEL
你应该使用:
SELECT SUM(IIF(field1 IS NULL, 0, field1) - IIF(field2 IS NULL, 0 field2))
FROM y
关于sql - 处理使用 SUM 的 SQL 查询中的 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33653615/