有个投票系统,有如下的数据库结构:table1   
    
  name      item1      item2     item3   ...    item20    time
  ...        ...        ...       ...    ...     ...       ... 
  ...        ...        ...       ...    ...     ...       ... 
  ...        ...        ...       ...    ...     ...       ... 
 
name是人,数量非常多,有重复;item是投票项目的分数,有20个item,有的item还可能为空;time是投票时间想问下,算出每人每项的平均分,空项要除外,还要在时间范围内,最后估计还要算每人的总分的
这样的sql该怎么写啊,各位高手帮帮小弟啦

解决方案 »

  1.   

    取平均分可以直接用AVG,自动过滤NULL值的情况select
        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
      

  2.   

    if object_id('table1')is not null drop table table1
    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*/
      

  3.   

    楼上的兄弟理解错了,一个人有多票,也就是会有很多A,很多B,很多C,另外是每一项的平均分。
    不过还是谢谢啦