有个投票系统,有如下的数据库结构:table1
name item1 item2 item3 ... item20 time
... ... ... ... ... ... ...
... ... ... ... ... ... ...
... ... ... ... ... ... ...
name是人,数量非常多,有重复;item是投票项目的分数,有20个item,有的item还可能为空;time是投票时间想问下,算出每人每项的平均分,空项要除外,还要在时间范围内,最后估计还要算每人的总分的
这样的sql该怎么写啊,各位高手帮帮小弟啦
name item1 item2 item3 ... item20 time
... ... ... ... ... ... ...
... ... ... ... ... ... ...
... ... ... ... ... ... ...
name是人,数量非常多,有重复;item是投票项目的分数,有20个item,有的item还可能为空;time是投票时间想问下,算出每人每项的平均分,空项要除外,还要在时间范围内,最后估计还要算每人的总分的
这样的sql该怎么写啊,各位高手帮帮小弟啦
name,
avg(item1),
avg(item2),
...,
avg(item20),
sum(isnull(item1,0)+isnull(item2,0)+...+isnull(item20,0))
from
table1
where
time between @startTime and @endTime
group by
name
go
create table table1( name varchar(10), item1 decimal(10,3) , item2 decimal(10,3), item3 decimal(10,3))
insert table1 select 'A',8.2,10,2.6
insert table1 select 'B',7.2,8,null
insert table1 select 'C',null,8,4
select name ,(isnull(item1,0)+isnull(item2,0)+isnull(item3,0))*1.0/3 as 平均分,
(isnull(item1,0)+isnull(item2,0)+isnull(item3,0))as 總分
from table1
/*name 平均分 總分
---------- ------------------- --------------
A 6.933333 20.800
B 5.066666 15.200
C 4.000000 12.000*/
不过还是谢谢啦