mh:工时   mhtype:工时类型(6种)字段:userid      mhtype    mh
      001          1        5
      001          1        3
      001          2        4
      001          3        9
      002          5        5
      002          6        7
      002          3        4
      002          3        9要求统计出每个人每一类工时的总合
结果要求如下格式
userid  mhtype1   mhtype2   mhtype3   mhtype4   mhtype5   mhtype6   allmh
001     8         4          9        0           0         0        21
002     0         0          13        0           5         7        25

解决方案 »

  1.   


    create table lk4(
    userid mediumint(3) unsigned zerofill not null,
    mhtype int not null,
    mh int not null);
    insert into lk4 values
    (001,1,5),
    (001,1,3),
    (001,2,4),
    (001,3,9),
    (002,5,5),
    (002,6,7),
    (002,3,4),
    (002,3,9);select userid,
    sum((case when mhtype=1 then mh else 0 end )) as 'mhtype1',
    sum((case when mhtype=2 then mh else 0 end )) as 'mhtype2',
    sum((case when mhtype=3 then mh else 0 end )) as 'mhtype3',
    sum((case when mhtype=4 then mh else 0 end )) as 'mhtype4',
    sum((case when mhtype=5 then mh else 0 end )) as 'mhtype5',
    sum((case when mhtype=6 then mh else 0 end )) as 'mhtype6',
    sum(mh) as 'allmh'
    from lk4 group by userid;
    结果:+--------+---------+---------+---------+---------+---------+---------+-------+
    | userid | mhtype1 | mhtype2 | mhtype3 | mhtype4 | mhtype5 | mhtype6 | allmh |
    +--------+---------+---------+---------+---------+---------+---------+-------+
    |    001 |       8 |       4 |       9 |       0 |       0 |       0 |    21 |
    |    002 |       0 |       0 |      13 |       0 |       5 |       7 |    25 |
    +--------+---------+---------+---------+---------+---------+---------+-------+
    2 rows in set (0.00 sec)
      

  2.   

    加精了。这种SQL很常见。以后大家可以借鉴。
      

  3.   

    个人观点:
    SQL是数据提取、管理统计的工具,其他语言(ex:PHP,Python,JSP,ASP...)通常是UI工具(甚至包括Excel)。
    SQL当然可以完成这种报表输出,但并非其特长;其他语言当然可以完成计数汇总统计,但所长在数据展现上。
    像这样的需求建议在SQL中完成基本统计后提交结果集给其他语言,由其完成报表展现。
    在这个例子中,SQL可以简单的处理为:select userid, mhtype, mh=sum(mh) from lk4 group by userid, mhtype
    从其他语言中将数据按客户需求格式拼接输出。
      

  4.   

    一楼,有点小小的错误,userid mediumint(3) unsigned zerofill not null,运行出错,稍改一下就OK了,
    非常不错的,高手,有些关键字,我们还没有学过。佩服!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!学习了,在此。
    能否解一下,case ,when,else ,end 的用法呀??