首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在oracle中有没有形式来实现这样的统计啊

2012-12-19 
在oracle中有没有方式来实现这样的统计啊?点击右边红色标题查看本文完整版:在oracle中有没有方式来实现这

在oracle中有没有方式来实现这样的统计啊?
点击右边红色标题查看本文完整版:在oracle中有没有方式来实现这样的统计啊?

在oracle中有没有方式来实现这样的统计

有这样的三张表,记录表(id,compid 单位编号,happentime 发生时间,protypeid 问题类型),问题类型表(proid,……),单

位表(compid单位编号,compname单位名称)。
要做一下三种统计:
一:统计某一时间段内某单位不同问题的汇总情况
选择好具体单位,起始时间、截止时间
生成一下这样的结果:

时间? 问题1? 问题2? 问题3
2002(起始时间)? 2? 4? 6
2003? 6? 8? 1
2004(截止时间)? 6? 8? 9
即统计一个单位在一个时间段内每年对应的问题类型的发生个数。

二:统计某一时间段内各单位不同问题的汇总情况
选择好起始时间、截止时间

生成这样的统计结果:

单位? 问题1? 问题2? 问题3
单位1? 2? 3? 6?
单位2? 4? 5? 7

即统计不同单位在这段时间内对应的每种问题发生个数

三:针对某个问题,统计某一时间段内各年度的汇总情况
选择开始时间、截止时间、问题分类

生成以下这样结果:
单位? 2002以前? 2003 2004
单位1? 12? 4? 23
单位2? 29? 3? 12
即统计每个单位在这个时间段内每年某具体问题的发生情况


原来的做法是通过代码来设计好相应的datatable,然后在这个datatable里添加列,最后手动添加每条记录。这种方法比较死板,而且速度慢,因为每条记录的每个属性的值都是统计出来的。

在oracle中有没有方式来实现这样的统计啊?
原先考虑过在oracle中生成临时表来做,原理和写代码设计datatable差不多。
如果在oracle中做,是不是要写些比较复杂的存储过程?

------解决方法--------------------
1 select happentime,sum(decode(protypeid,'问题1',1)),sum(decode(protypeid,'问题2',1)),sum(decode(protypeid,'问题3',1)) from 表? where compid=*** group by happentime(如果时间包含年月日 ,则你按哪个分组就用SUBSTR去截断再GROUP)
2, select B.compname,sum(decode(protypeid,'问题1',1)),sum(decode(protypeid,'问题2',1)),sum(decode(protypeid,'问题3',1)) from 记录表 A inner join 单位表 B
on? A.compid=B. compid? group by B.compname
3,? select B.compname,
sum
(case when
A.happentime <2002
then 1
else
0 end ),sum
(case when
A.happentime =2003
then 1
else
0 end ),sum
(case when
A.happentime =2004
then 1
else
0 end ) from 记录表 A inner join 单位表 B
on? A.compid=B. compid? group by B.compname

好久没写SQL了,可能一俩个语法弄错一点 你自己调一下
------解决方法--------------------    

热点排行