问题说明:需要配置一个报表,现有一张表xmb,表结构为:x_xmmc(班级名称)、x_xmbm(班级编码,唯一)、x_bdsj(报到时间)、x_lxsj(离校时间)、x_pxrs(培训人数),现要查询出当前年份每个月的的培训人数,即分别列出一月份,二月份,三月份.....十二月份的培训人数,除了select yf, rs from (select '一月' yf, sum(x_pxrs) rs from xmb where x_bdsj<='2010-01-31' and x_lxsj>='2010-01-01')union (select '二月' yf, sum(x_pxrs)rs from xmb where x_bdsj<='2010-02-28' and x_lxsj>='2010-02-01') 然后union三月,四月....求这种方式来查询以外的高效、简便的查询方法,而且其中的时间是当前年份的各个月份,是动态的,比如2010年查看的时候就是2010年每个月的人数,到2011年查看的时候就是2011年各个月份的,望高手指点。
解决方案 »
- 为什么v$database 视图中的flashback_on 字段为NO,我仍然能闪回表呢?
- 想实现同时插入B表中的数据和用户从界面录入的数据到A表中,要怎么实现?
- PL/SQL 连接超时 这个是怎么回事,求助!!!!
- 判断GBK汉字的问题
- asp.net中连接oracle及select问题
- 大虾们帮个忙,在线求一SQL语句,急!否则今天这个模块就做不完了!先谢了!马上结帖!
- Oracle初学者,请大家推见一点关于ORACLE的书
- 象SQL中的表你能告诉我几个,小弟先谢了
- 在触发器中取记录的问题
- oracle12c x64, plsql developer 11, 无法导出导入表
- 如何查Oracle上执行的SQL历史
- 单个表数据量过大,求解决方案
google下 有好多例子的
--paddy的博客
http://blog.csdn.net/gelyon/archive/2010/09/20/5897608.aspx
--先生成一张你当前年份的每个月的开始日期和结束日期的临时表,如:
SELECT To_Char(Add_Months(Trunc(SYSDATE,'yyyy'),LEVEL-1),'yyyy-mm-dd') starttime,
To_Char(Last_Day(Add_Months(Trunc(SYSDATE,'yyyy'),LEVEL-1)),'yyyy-mm-dd') endtime
FROM dual
CONNECT BY LEVEL<=12;--然后用这个临时表跟你原表进行外连接,依据月份进行分组,再用decode转换一下,转换12次而已,因为有12个月。
--只是简单的行列转化而已