新手求一每月班级人数统计的sql

liao77a 2010-11-10 03:20:00
问题说明:需要配置一个报表,现有一张表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年各个月份的,望高手指点。
...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2010-11-10
  • 打赏
  • 举报
回复

--先生成一张你当前年份的每个月的开始日期和结束日期的临时表,如:
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个月。
--只是简单的行列转化而已
liao77a 2010-11-10
  • 打赏
  • 举报
回复
问题补充,报到时间和离校时间有的记录只相差几天,有的记录相差好几个月
  • 打赏
  • 举报
回复
你decode 行列转换
google下 有好多例子的
--paddy的博客
http://blog.csdn.net/gelyon/archive/2010/09/20/5897608.aspx
luoyoumou 2010-11-10
  • 打赏
  • 举报
回复
-- 作业题吧?......

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧