以下是一些测试数据,因此您可以查看我的数据和结果:
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?
答案 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
。