这是数据
表结构是:
- SQL code
create table OM_RT( business_traffic NUMBER, finishtime DATE, center_id VARCHAR2(2))
center_id 代表机构号 一共4个机构 01、02、03、04
finishtime 为完成时间
business_traffic 为完成数量
由于需要对应报表工具的需要,需要构建如下的结果集
东公司 西公司 北公司 南公司 时间段
112 234 345 345 08:30-09:00
123 123 455 88 09:00-09:30
123 466 54 46 09:30-10:00
234 789 645 4646 10:00-10:30
234 446 79 78 10:30-11:00
345 79 456 78 11:00-11:30
345 454 797 45 11:30-12:00
56 455 79 54 12:00-12:30
.
.
.
.
.
.
. 16:30-17:00
查询页面4个机构为多选框 多选机构后加上系统当前时间为查询条件去查OM_RT表,该表每半小时更新一次,也就是说上午09:00的时候只有08:30--09:30(从08:30开始有数据)的数据,如果17:00(17:00后不再有数据)的时候则有全天的数据。
由于机构不确定,并且需要把查询结果往右叠加,我尝试写了一下,发现非常麻烦,以下是我写的sql
- SQL code
select sum(t.BUSINESS_TRAFFIC), '08:30-09:00' from OM_MCMS_AUTHLOG_RT t where T.FINISHTIME between to_date(((SUBSTR(to_char(sysdate, 'yyyy-mm-dd HH:mi:ss'), 1, 11)) || '08:30:00'), 'yyyy-mm-dd HH:mi:ss') and to_date(((SUBSTR(to_char(sysdate, 'yyyy-mm-dd HH:mi:ss'), 1, 11)) || '09:00:00'), 'yyyy-mm-dd HH:mi:ss') and T.CENTER_ID = '02'
这只能查出来一个机构的,我还需要左连接构建其他三个机构
如果多选四个机构 在08:30-09:00 我就需要写四个左连接,如果全天的话,这个sql真的很庞大
有没有高手能指点一下,根据系统当前时间和选择的机构,能查我提供的那张表,展示我描述的结果集,谢谢
------解决方案--------------------
- SQL code
--帮你简化下select sum(decode(t.CENTER_ID,'01',t.BUSINESS_TRAFFIC,0)) 东公司,sum(decode(t.CENTER_ID,'02',t.BUSINESS_TRAFFIC,0)) 西公司,sum(decode(t.CENTER_ID,'03',t.BUSINESS_TRAFFIC,0)) 北公司,sum(decode(t.CENTER_ID,'04',t.BUSINESS_TRAFFIC,0)) 南公司, '08:30-09:00' from OM_MCMS_AUTHLOG_RT t where T.FINISHTIME between to_date((to_char(sysdate, 'yyyy-mm-dd') ||' 08:30:00'),'yyyy-mm-dd HH:mi:ss') and to_date((to_char(sysdate, 'yyyy-mm-dd') ||' 09:00:00'),'yyyy-mm-dd HH:mi:ss');