34,587
社区成员
发帖
与我相关
我的任务
分享
select e_id, max(case evaltype when 0 then point else 0 end)*0.2
+max(case evaltype when 4 then point else 0 end)*0.4
+max(case evaltype when 3 then point else 0 end)*
(case max(evaltype) when 4 then 0.4 else 0.8 end)
from a group by e_id
create table a (e_id int , evalType smallint, point int)
insert into a values(1, 0, 5)
insert into a values(1, 3, 3)
insert into a values(1, 4, 5)
insert into a values(2, 0, 5)
insert into a values(2, 3, 3)
insert into a values(2, 4, 5)
insert into a values(3, 0, 5)
insert into a values(3, 3, 3)
insert into a values(4, 0, 5)
insert into a values(4, 3, 3)
--select e_id ,case when evaltype=4 then from a
select e_id,point= case when max(evaltype)=4 then
sum(case when evaltype=0 then point*0.2 when evaltype=3 then point*0.4
when evaltype=4 then point*0.4 end) else
sum(case when evaltype=0 then point*0.2 when evaltype=3 then point*0.8
end) end from a
group by e_id
go
drop table a
/*
e_id point
----------- ---------------------------------------
1 4.2
2 4.2
3 3.4
4 3.4
*/
create table a (e_id int , evalType smallint, point int)
insert into a values(1, 0, 5)
insert into a values(1, 3, 3)
insert into a values(1, 4, 5)
insert into a values(2, 0, 5)
insert into a values(2, 3, 3)
insert into a values(2, 4, 5)
insert into a values(3, 0, 5)
insert into a values(3, 3, 3)
insert into a values(4, 0, 5)
insert into a values(4, 3, 3)
SELECT * FROM A
select T1.E_ID,T1.POINT,T2.POINT,T3.POINT
,T1.POINT*0.2
+T2.POINT*(CASE WHEN T3.E_ID IS NULL THEN 0.8 ELSE 0.4 END)
+ISNULL(T3.POINT*0.4,0)
from a T1
INNER JOIN A T2 ON T1.e_id=T2.e_id AND T1.EVALTYPE=0 AND T2.EVALTYPE=3
LEFT JOIN A T3 ON T1.e_id=T3.e_id AND T3.EVALTYPE=4
/*
1 5 3 5 4.2
2 5 3 5 4.2
3 5 3 NULL 3.4
4 5 3 NULL 3.4
*/
create table a (e_id int , evalType smallint, point int)
insert into a values(1, 0, 5)
insert into a values(1, 3, 3)
insert into a values(1, 4, 5)
insert into a values(2, 0, 5)
insert into a values(2, 3, 3)
insert into a values(2, 4, 5)
insert into a values(3, 0, 5)
insert into a values(3, 3, 3)
insert into a values(4, 0, 5)
insert into a values(4, 3, 3)
select * from a
select ISNULL(MAX(CASE evalType WHEN 0 THEN point END) * 0.2
+ MAX(CASE evalType WHEN 3 THEN point END) * 0.4
+ (CASE
WHEN MAX(CASE evalType WHEN 4 THEN point END) IS NULL
THEN MAX(CASE evalType WHEN 3 then point END) * 0.4
ELSE MAX(CASE evalType WHEN 4 THEN point END) * 0.4
END)
, 0) AS POINT2
from a
group by e_id
最好给出表结构,测试数据,计算方法和正确结果.
WHEN MAX(CASE TEES.EvalEmpType WHEN 4 THEN TER.EvalPoint END) IS NULL