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了,可能一俩个语法弄错一点 你自己调一下

------解决方法--------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值