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

标签 sql vba excel

问题:

我正在尝试在 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 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/

相关文章:

c++ - 使用 SqlConnection 在托管 C++ 中连接和查询数据库

excel - 如何使用 xlsxwriter 创建没有 "Horizontal (Value) Axis"的图表

vba - Excel VBA 公式德语/法语/意大利语/俄语/荷兰语/外国函数

sql - Groovy Sql 获取所有列

mysql - 如何在我的 Go 程序中运行测试之前获取数据库模式

SQL调优问题

由于内存碎片,Excel 2013 崩溃

vba - MS Word VBA - 确定 "style run"的范围?

excel - 用户表单文本框必填字段 - 仅接受数字模式

excel - 如果代码在不同的文件中,如何在目标文件中进行更改