每年的月度統計報表


我要做一個年度報表統計數據的報表。
年度: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)



注意!

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



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