每年的月度统计报表


我要做一个年度报表统计数据的报表。
年度: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)

9 个解决方案

#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


引用 3 楼 wwwwb 的回复:
没有看到表结构及记录,解决时间怎么计算
 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已解决或者状态=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


引用 5 楼 wwwwb 的回复:
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)


我写晕了。我刚才试过用  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)


智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告