Sql server 如何基于where子句获取包含NULL的总和

Sql server 如何基于where子句获取包含NULL的总和,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我有一个PlazaInsuranceWPDataSet表,它有writenPrium和SICCode列。列代码具有空值。 总保费总额为108515689 如果我说: select sum(WrittenPremium) from PlazaInsuranceWPDataSet 结果是正确的 但如果我说 select sum(WrittenPremium) from PlazaInsuranceWPDataSet WHERE SICCode IN ('0161','0173','

我有一个PlazaInsuranceWPDataSet表,它有writenPrium和SICCode列。列代码具有空值。 总保费总额为108515689

如果我说:

select sum(WrittenPremium) 
from PlazaInsuranceWPDataSet
结果是正确的

但如果我说

  select sum(WrittenPremium) 
    from PlazaInsuranceWPDataSet
WHERE SICCode IN ('0161','0173','0179','0181'...)
结果是108024995,这是不正确的,因为它不拾取具有空值的SICCode

我尝试使用ISNULL函数,但仍然没有成功:

   select sum(WrittenPremium) 
        from PlazaInsuranceWPDataSet
    WHERE ISNULL(SICCode,0) IN ('0161','0173','0179','0181'...)

那么,如何使用where子句获得WrittenPremium的全部总和呢?

您可以将该值封装在一个合并中

选择SumCoaleScreatenPremium,0 来自广场保险公司
其中ISNULLSICCode、'0161'、'0173'、'0179'、'0181'

WHERE SICCode IN ('0161','0173','0179','0181'...) 
   OR SICCode is null
选择SumCoaleScreatenPremium,0 来自广场保险公司 其中ISNULLSICCode、0在'0161'、'0173'、'0179'、'0181'…

请尝试此操作

WHERE SICCode IN ('0161','0173','0179','0181'...) 
   OR SICCode is null
选择sumWrittenPremium 来自广场保险公司 其中ISNULLSICCode、0中的0、“0161”、“0173”、“0179”、“0181”

WHERE SICCode IN ('0161','0173','0179','0181'...) 
   OR SICCode is null
问候

阿卜杜勒请试试这个

选择sumWrittenPremium 来自广场保险公司 其中ISNULLSICCode、0中的0、“0161”、“0173”、“0179”、“0181”

WHERE SICCode IN ('0161','0173','0179','0181'...) 
   OR SICCode is null
问候


阿卜杜勒

我试过了。问题中描述了这一点。不行,我试过了。问题中描述了这一点。不起作用。因此,您使用IsNull将值0替换为Null,但如果0不是中右侧的选项之一,则不会有帮助。如果0是一个有效的SIC代码,那么事情就会变得更加混乱。通过提供一个默认的INT值来对字符串集合进行测试来混合数据类型也不是最佳做法。您的查询显示WHERE ISNULLSICCode,“0161”中的0,…-有两个问题,为什么要混合字符串和整数,为什么不在in的右侧包含0?因此使用IsNull将值0替换为Null,但如果0不是in右侧的选项之一,则没有帮助。如果0是一个有效的SIC代码,那么事情就会变得更加混乱。通过提供一个默认的INT值来对字符串集合进行测试来混合数据类型也不是最佳做法。您的查询显示WHERE ISNULLSICCode,“0161”中的0,…-两个问题,为什么要混合字符串和整数,为什么不在中的右侧包含0?