有个报表是这样的:
A 表: 时间(yy-mm-dd hh24:mi:ss) 状态编码 业务流水号 等字段 B 表 : 状态编码 状态名 要求统计出某时间段内 各个状态发生业务的笔数,大致效果如下
时间 状态名1 状态名2 状态名3 状态名4 状态名5....
2008-10-01 5笔 6笔 5笔 0......
.... 2008-10-31 2笔 ........
不知道什么做,由于只有几种状态 我就用
SELECT TO_CHAR(DATE , 'YYYY--MM--DD') SUM(CASE WHEN STATUS= '01' THEN 1 ELSE 0 END )
AS 状态名1 ,.......FROM A表 WHERE 时间条件 GROUP BY TO_CHAR(DATE , 'YYYY--MM--DD')
但是只能静态的实现,如果状态增加,语句就变了,JDBC我会实现,IBATIS该如何弄?存储过程??数据库为ORCALE
问题点数:
A 表: 时间(yy-mm-dd hh24:mi:ss) 状态编码 业务流水号 等字段 B 表 : 状态编码 状态名 要求统计出某时间段内 各个状态发生业务的笔数,大致效果如下
时间 状态名1 状态名2 状态名3 状态名4 状态名5....
2008-10-01 5笔 6笔 5笔 0......
.... 2008-10-31 2笔 ........
不知道什么做,由于只有几种状态 我就用
SELECT TO_CHAR(DATE , 'YYYY--MM--DD') SUM(CASE WHEN STATUS= '01' THEN 1 ELSE 0 END )
AS 状态名1 ,.......FROM A表 WHERE 时间条件 GROUP BY TO_CHAR(DATE , 'YYYY--MM--DD')
但是只能静态的实现,如果状态增加,语句就变了,JDBC我会实现,IBATIS该如何弄?存储过程??数据库为ORCALE
问题点数:
解决方案 »
- 查看表空间?
- ORCLE存储过程循环取值问题
- 不显示删除回复显示所有回复显示星级回复显示得分回复 请问:在oracle的存储过程中,如果获得动态查询语句的列数和各个列名?
- 求救:oracle9i 中long raw 数据无法实现表表转移
- oracle数据库中表字段增量问题(日期+当前编号)
- [求助]请教高手跨表查询的问题 !
- 想确保一个表中某一列数据不重复,这列又不是主键列,该如何处理?
- 请问游标是什么?50分赠!
- 我在linux.0装oracle 8.1.7,为什么都是乱码/
- Oracle数据库JDBC连接出现的问题: java.net.ConnectException: Connection refused: connect
- ora-06511 游标已经打开(有代码,请高手指点)急!!谢谢
- 跪求一个好用的数据库同步软件,最好资料全些
http://lengyue.javaeye.com/blog/195441
----------- ---------- ----------
2008-10-1 1001 20080001
2008-10-1 1001 20080002
2008-10-1 1002 20080003
2008-10-1 1003 20080004
2008-10-1 1003 20080005
2008-10-2 1002 20080006
2008-10-2 1002 20080007
2008-10-2 1001 200800088 rows selectedSQL> select * from b;ZTBM ZTM
---------- --------------------
1001 状态名1
1002 状态名2
1003 状态名3
1004 状态名4SQL>
SQL> create or replace procedure proc_test as
2 cursor cur_b is
3 select * from b;
4 v_sql varchar2(2000);
5 i number;
6 begin
7 v_sql := 'create or replace view view_sleepzzzzz as select to_char(sj,''yyyy-mm-dd'') sj,';
8 for c_temp in cur_b loop
9 v_sql := v_sql || 'sum(decode(ztbm,''' || c_temp.ztbm || ''',1,0)) ' ||
10 c_temp.ztm || ',';
11 end loop;
12 v_sql := substr(v_sql, 1, length(v_sql) - 1) || ' from a group by to_char(sj,''yyyy-mm-dd'')';
13 execute immediate v_sql;
14 end proc_test;
15 /Procedure createdSQL> exec proc_test;PL/SQL procedure successfully completedSQL> select * from view_sleepzzzzz;SJ 状态名1 状态名2 状态名3 状态名4
----------- ---------- ---------- ---------- ----------
2008-10-1 2 1 2 0
2008-10-2 1 2 0 0
/* -- 以下是动态增加一个状态测试
SQL> select * from b;ZTBM ZTM
---------- --------------------
1001 状态名1
1002 状态名2
1003 状态名3
1004 状态名4
1005 状态名5SQL> exec proc_test;PL/SQL procedure successfully completedSQL> select * from view_sleepzzzzz;SJ 状态名1 状态名2 状态名3 状态名4 状态名5
----------- ---------- ---------- ---------- ---------- ----------
2008-10-1 2 1 2 0 0
2008-10-2 1 2 0 0 0SQL>
*/
ibatis和jdbc有什么差别呀,你这里可以用jdbc做,当然就可以用ibatis做,用HashMap做resultClass就可以了。