gpt4 book ai didi

sql - 处理使用 SUM 的 SQL 查询中的 NULL 值

转载 作者:行者123 更新时间:2023-12-01 19:33:11 36 4
gpt4 key购买 nike

问题:

我正在尝试在 VBA (Excel) 中执行包含使用 SUM 的计算的查询,例如

从 y 中选择 SUM(field1) - SUM(field2) 作为“newField”

如果没有空值或空字段,则代码可以完美运行,但是一旦我在 field1 或 field2 中有一个空/空值,就会返回空白。

因此,如果 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 WHENIIF互换(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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com