Sql-Server

SQL Server 的聚合函式忽略空值。我該如何糾正?

  • February 20, 2015

根據MS的知識庫

除了 COUNT,聚合函式忽略空值。

有誰知道我怎樣才能讓它正常工作,也就是說,如果它嘗試與值中的 null 進行聚合,則返回 null ?

例子:

SELECT SUM("col")
FROM (
   SELECT NULL "col"
   UNION
   SELECT 1 "col"
) test

我希望這個查詢返回NULL,而不是 1。

您可以通過對查詢應用 where 子句來模擬這一點:

with test_data (col) as (
  select null union all 
  select 1 union all
  select 2
)
select sum(col)
from test_data
where not exists (select 1 
                 from test_data
                 where col is null);

編輯

Andriy 是對的,這也可以寫成:

with test_data (col) as (
  select null union all 
  select 1 union all
  select 2
)
select case 
         when count(*) = count(col) then sum(col)
         else null
      end
from test_data;

引用自:https://dba.stackexchange.com/questions/93313