我要做一个年度报表统计数据的报表。
年度:2013月份     总数量    已解决数量    已关闭数量        完成数量      解决时间   解决率
1月       3000      2000         800           2800         50000    17.85
2月      4500       1000       3000            4000         ...       ...
..................
我需要做类似以上的一个表格。单独统计每个月的总数量,或者单独统计每个月的已解决数量,我都能求出来,现在要这几个放一起,不知道怎么做了。
主要是每个列的统计数据的查询条件都不同。不知道大家做这类统计是怎么做的?
单独一个个列做出来,然后拼起来吗?用什么关键字拼啊?select count(request_id) as '总数量'
from itsm_request_base
where substring(create_time,1,4)='2013' 
GROUP BY substring(create_time,6,2)select count(request_id) as '已解决数量'
from itsm_request_base
where substring(create_time,1,4)='2013' and `STATUS`=4
GROUP BY substring(create_time,6,2)年度月度统计报表

解决方案 »

  1.   

    一般是一次做出来所有的列类似select 月份,sum(),sum(case when xxxx then xxx end),coun(case  when xx) 
    from tb
    group by 月份
      

  2.   

    没有看到表结构及记录
    select substring(create_time,6,2),
    count(request_id) as 总数量,
    sum(if(`STATUS`=4,1,0)) as 已解决数量,
    sum(if(`STATUS`=5,1,0)) as 已关闭数量,
    sum(if(`STATUS`=6,1,0)) as 完成数量,
    sum(sec_to_time(time_to_sec(create_time)) as 解决时间
     from itsm_request_base
     where substring(create_time,1,4)='2013' and 
     GROUP BY substring(create_time,6,2)
      

  3.   

    没有看到表结构及记录,解决时间怎么计算
     select substring(create_time,6,2),
     count(request_id) as 总数量,
     sum(if(`STATUS`=4,1,0)) as 已解决数量,
     sum(if(`STATUS`=5,1,0)) as 已关闭数量,
     sum(if(`STATUS`=6,1,0)) as 完成数量,
     sum(sec_to_time(time_to_sec(create_time)) as 解决时间
      from itsm_request_base
      where substring(create_time,1,4)='2013'  
      GROUP BY substring(create_time,6,2)
      

  4.   

    谢谢。
    前四列出来了,第五、六、七列的条件和前面又不同了。
    第五列是 状态=4已解决或者状态=5已关闭。
    第六列是 状态=4已解决或者状态=5已关闭的情况下,统计一个字段的数值.
    select sum(itsm_incident.resolution_duration) from itsm_incident left join itsm_request_base on itsm_incident.request_id=itsm_request_base.request_id
    where substring(create_time,1,4)='2013' and (`STATUS`=4 or `STATUS`=5)
    GROUP BY substring(create_time,6,2)
    第七列是将第六列除以第五列得到的值。这个该怎么接着做啊?
      

  5.   

    select ubstring(create_time,6,2),
    ....
    sum(if(`STATUS`=4 or `STATUS`=5,1,0)),
    sum(if(`STATUS`=4 or `STATUS`=5,字段的数值,0))
     from itsm_request_base
       where substring(create_time,1,4)='2013'  
       GROUP BY substring(create_time,6,2)
      

  6.   

    sum(case `status` WHEN 4 then 1 when 5 then 1 else 0 end) as '已完成数量' 又弄出来一个列了。我再试试。
      

  7.   


    我写晕了。我刚才试过用  if(`status`=4 || `status`=5)这个是错误的。
    我把SQL语句和代码的或弄混了。哎。
      

  8.   

    sum(if(`STATUS`=4 or `STATUS`=5,1,0))
      

  9.   

    非常感谢。写出来了。
    select substring(create_time,6,2) as '月份',
    count(itsm_request_base.request_id) as '工单数量',
    sum(if(`status`=4,1,0)) as '已解决数量',
    sum(if(`status`=5,1,0)) as '已关闭数量',
    sum(if((`status`=4 or `status`=5),1,0)) as '已完成数量',
    sum(if((`status`=4 or `status`=5),itsm_incident.resolution_duration,0)) as `解决时间`,
    sum(if((`status`=4 or `status`=5),itsm_incident.resolution_duration,0))/sum(if((`status`=4 or `status`=5),1,0)) as `平均解决时间`
    from itsm_request_base 
    left join itsm_incident on itsm_incident.request_id=itsm_request_base.request_id
    where substring(create_time,1,4)='2013' 
    GROUP BY substring(create_time,6,2)