SQL在执行时返回NULL

问题描述 投票:1回答:3

为什么这个SQL查询在执行时会返回NULL?

请参阅代码 - 提前感谢

码:

SELECT 
    SUM(CONVERT(INT, Client_AmntApplied)) AS AmountApplied
FROM 
    ClientDatabase C
WHERE 
    DateReceivedMonth = 1
    AND ADR1 = 2017
    AND StepStatus IS NULL;

输出:

enter image description here

sql sql-server
3个回答
2
投票

显然,没有记录与where子句一起返回。

WHERE DateReceivedMonth = 1
      AND ADR1 = 2017
      AND StepStatus IS NULL;

检查你的where子句,如果你想获得默认值的0,只需使用ISNULL

SELECT SUM(CONVERT(INT, ISNULL(Client_AmntApplied,0))) AS AmountApplied
FROM ClientDatabase C
WHERE DateReceivedMonth = 1
      AND ADR1 = 2017
      AND StepStatus IS NULL;

如果没有要返回的记录,并且如果要显示默认值,则可以使用COALESCE

SELECT COALESCE(SUM(CONVERT(INT, ISNULL(Client_AmntApplied,0))),0) AS AmountApplied
FROM ClientDatabase C
WHERE DateReceivedMonth = 1
      AND ADR1 = 2017
      AND StepStatus IS NULL;

1
投票
declare @ast varchar(10)

set @ast = null

SELECT SUM(CONVERT(INT, Client_AmntApplied)) AS AmountApplied
FROM ClientDatabase C
WHERE DateReceivedMonth = 1
AND ADR1 = 2017
and (StepStatus = ISNULL(@ast, StepStatus ) Or StepStatus is null)

除此之外,你还可以用qazxsw poi替换sum函数

试试这种方式


1
投票

关于SUM的事实:

  • 当没有要记录的记录时,将返回SUM(CONVERT(INT, ISNULL(Client_AmntApplied,0)))(WHERE条件与任何记录不匹配或表是空的)
  • 将忽略汇总列中的NULL值(因此NULLCOALESCE(column, 0)对结果没有影响)
  • 返回至少一条记录(当没有记录到SUM时为NULL)
  • 作为前两个的结果,当汇总列的匹配记录中的所有值都是ISNULL(column, 0)时,它将返回NULL

如果在没有要汇总的记录时想要得到0而不是NULL,则可以使用以下表达式之一:

NULL

或者COALESCE(SUM(column), 0) AS columnSum -- or -- ISNULL(SUM(column), 0) AS columnSum 构造(CASE..WHEN只是一个简写)。

检查查询结果而不进行聚合,以检查是否有与WHERE条件匹配的记录。

© www.soinside.com 2019 - 2024. All rights reserved.