SQL如何将Null不参与计算

将得分为Null的值不参与计算

 

--creaFuntion

create Table #Value --得分表
(
    [ID] int,
 [A] int,
 [B] int,
 [C] int,
)


create Table #Wei
(
    [ID] int,
 [A1] int,
 [B1] int,
 [C1] int
)

insert into #Value(ID,A,B,C) values(1,90,80,100);
insert into #Value(ID,A,B,C) values(2,100,100,100);
insert into #Value(ID,A,B,C) values(3,null,NULL,NULL);
insert into #Value(ID,A,B,C) values(4,100,100,100);

insert into #Wei(ID,A1,B1,C1) values(1,2,100,1);
insert into #Wei(ID,A1,B1,C1) values(2,1,1,1);
insert into #Wei(ID,A1,B1,C1) values(3,1,1,1);
insert into #Wei(ID,A1,B1,C1) values(4,1,1,1);

 

--根据公式 ID1的计算平均值是: A*A1+B*B1+C*C1/(A1+B1+C1)
-- case when A is null then 0 else IsNull(A1,0) end 可以做成一个函数

 

 


select #Wei.ID as ID, A*A1 as A2 , B*B1 as B2 ,C*C1 as C2,
 case when A is null then 0 else IsNull(A1,0) end
+case when B is null then 0 else IsNull(B1,0) end
+case when C is null then 0 else IsNull(C1,0) end as Wei Into #temp
from #Value,#Wei where #Value.ID = #Wei.ID
select * from #temp;

--判断权重和是否为0
select ID , case  when Wei = 0 then Null
                else  (IsNull(A2,0)+IsNull(B2,0)+IsNull(C2,0))/Wei
           end as Score
from #temp;

drop table #value;
drop table #Wei;
drop table #temp;

 

 

 

结果

ID  A2  B2  C2  Wei
1  90  80  100   3
2  100  null  100  2
3  null  null  null   0

4  100  100  100  3

 

 

ID Score
1 90
2 100
3 Null
4 100

转载于:https://www.cnblogs.com/ceci/archive/2010/01/06/1640122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值