使用group by子句时,为什么SUM总计显示为NULL?

时间:2015-01-26 18:48:41

标签: sql sql-server

以下是一些测试数据,因此您可以查看我的数据和结果:

create table test_table
(employee nvarchar (50),
job nvarchar (50),
phase nvarchar (50),
date datetime,
totaltime real)

insert into test_table (employee,job,phase, date, totaltime)

values ('1234','1-100','2-0000','1/1/2015', 7),
 ('1234',NULL,'2-0000','1/1/2015', 7)

 SELECT employee,date,job, phase,
(case 
when job = NULL then SUM(CAST(ISNULL(TotalTime,0)as NUMERIC(36,2)))
when job > '0' then SUM(CAST(ISNULL(TotalTime,0)as NUMERIC(36,2))) 
end)
FROM test_table
group by employee,job,phase,date

以下是我的结果 -

员工,日期,工作,阶段,总时间

1234,2015-01-01,NULL,2-0000,NULL

1234,2015-01-01,1-10000,20000,7.00

当作业为NULL时,为什么我的总时间显示为NULL?

3 个答案:

答案 0 :(得分:4)

因为Job永远不会等于NULL。您应该使用job IS NULL代替

答案 1 :(得分:3)

您需要使用IS NULL代替= NULL。没有任何内容等于NULL(甚至不是NULL},因此NULL = NULL会返回null(未知),而您的case语句会落入&# 34;默认"价值null

 SELECT employee,date,job, phase,
(case 
when job IS NULL then SUM(CAST(ISNULL(TotalTime,0)as NUMERIC(36,2)))
when job > '0' then SUM(CAST(ISNULL(TotalTime,0)as NUMERIC(36,2))) 
end)
FROM test_table
group by employee,job,phase,date

答案 2 :(得分:0)

附录,如果要选择非{null的Job。你只是否定它job IS NOT NULL