oracle sql精华

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SQL按月统计(2009-08-1223:32:40)转载▼标签:sql按月统计oracleit分类:Oracle前提:created_date是表A的一个日期字段1、按月分组统计(1\2\3\4等自然月统计)selectsum(quantity)fromAgroupbytrunc(created_date,‘mm’);用trunc函数将日期转化为每个月的第一天(或者说是忽略月(mm)后面得日期);2、如果需求是要按每个月的25号来划分的话(实际经常碰到)selectsum(quantity)fromAgroupbytrunc(created_date+(add_months(created_date,1)-created_date-20),'mm');20的作用是每个月按20号分割月之间如果是按每个月的15号分割那么20的位置就是15;蓝色字体的意思是求得所给日期created_date所在月的天数;减去20是求得还需要再加上多少天就到下个月了;JDBC连接过程(oracle)2009-01-1821:10:47|分类:专题JDBC|标签:|字号大中小订阅1.newJavaProject(JDBC)2.src----newclass(TestJDBC)3.importjava.sql.*;(jdbc用到的所有的类库)4.引入驱动包(SQLPLUS属性看Oracle安装路径)1.C:\oracle\ora92\jdbc\lib\classes12.jar2.要用jar包里的内容,必须加到classpath里3.eclipse里要用jar包,必须加到BuildPath里4.JDBC---BuildPath---AddExternalArchives---classes12.jar5.classes12类库,找到oracle.jdbc.driver--oracleDriver.class类6.产生类的对象(2种)1.Class.forName(oracle.jdbc.driver.OracleDriver);//马用这种Classnotclass(keyword)java.langClass类类装载器,调用forName方法,根据字符串,把你类的实例new出来forName()throwsClassNotFoundException(先throwsException)new实例的时候Driver自动向DriverManager注册2.(常用)neworacle.jdbc.driver.OracleDriver();7.以上就拿到了跟数据库的连接8.Connectionconn=DriverManager.getConnection(数据库连接字符串,用户名,密码)Connectionconn=DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:AOOPLE,scott,tiger);9.执行SQL语句Statementstmt=conn.createStatement();//定义在前面ResultSetrs=stmt.executeQuery(select*fromdept);while(rs.next()){System.out.println(rs.getString(deptno));System.out.println(rs.getInt(deptno));System.out.println(rs.getString(dname));}rs.close();//也报异常stmt.close();conn.close();:::::::::中间出现异常close()都不会执行了:::::::::::importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;publicclassTestJDBC{publicstaticvoidmain(String[]args){Connectionconn=null;Statementstmt=null;ResultSetrs=null;try{Class.forName(oracle.jdbc.driver.OracleDriver);conn=DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:AOOPLE,scott,tiger);stmt=conn.createStatement();rs=stmt.executeQuery(select*fromdept);while(rs.next()){System.out.println(rs.getString(deptno));System.out.println(rs.getString(dname));}}catch(ClassNotFoundExceptione){e.printStackTrace();System.out.println(noqudong);}catch(SQLExceptione){e.printStackTrace();}finally{try{if(rs!=null){rs.close();rs=null;}if(stmt!=null){stmt.close();stmt=null;}if(conn!=null){conn.close();conn=null;}}catch(SQLExceptione){e.printStackTrace();}}}}//异常放log文件里,//加注释;;selectid,count(*)fromtablenamegroupbyidhavingcount(*)0SELECTCOUNT(U.ID)FROMT_USERU,T_ROLER,T_USER_ROLEURWHEREU.ID=UR.USER_IDANDR.ID=UR.ROLE_IDGROUPBYR.ID;试一下nvl()SELECTnvl(COUNT(U.ID),0)FROMT_USERU,T_ROLER,T_USER_ROLEURWHEREU.ID=UR.USER_IDANDR.ID=UR.ROLE_IDGROUPBYR.ID帮忙看一下这段分月统计的SQL楼主发表于2003-10-1717:47|只看该作者|正序看帖|打印下面这段SQL语句的作用是统计出分月收入,然后求出每月所占的比例。我总觉得这样写有点问题,请问各位高手帮忙指点一下!!!还有就是怎么求每月的收入增长率((本月收入-上月收入)/上月收入)??SQLSelectc.月份,c.收入合计,round((c.收入合计/d.全年合计)*100,2)As所占比例2From3(Selectto_char(a.日期,'MM')||'月'As月份,Sum(a.实收金额)As收入合计4From病人费用汇总a5GroupByto_char(a.日期,'MM')||'月')C,6(Select'全年总计'As月份,Sum(b.实收金额)As全年合计7From病人费用汇总b)D;月份收入合计所占比例------------------------07月502587.5326.7408月1105787.9658.8309月271370.0714.44ORACLE817完全恢复手记!谢谢海龙的点拨,下面是一个SQL语句:Selectc.月份,c.收入合计,(c.收入合计/d.全年合计)*100As所占比例,((c.收入合计-(LAG(c.收入合计,1,c.收入合计)over(orderbyc.月份)))/(LAG(c.收入合计,1,c.收入合计)over(orderbyc.月份)))*100as收入增长率From(Selectto_char(a.日期,'YYYYmm')||'月'As月份,Sum(a.实收金额)As收入合计From病人费用汇总awherea.日期between[0]and[1]GroupByto_char(a.日期,'YYYYmm')||'月')C,(SelectSum(b.实收金额)As全年合计From病人费用汇总bwhereb.日期between[0]and[1])D对不起,5楼的帖子修改一下!!!!!!不用建表,直接在查询上面再套一层就行,selectsum(所占比例)from(Selectc.月份,c.收入合计,round((c.收入合计/d.全年合计)*100,2)As所占比例From(Selectto_char(a.日期,'MM')||'月'As月份,Sum(a.实收金额)As收入合计From病人费用汇总aGroupByto_char(a.日期,'MM')||'月')C,(Select'全年总计'As月份,Sum(b.实收金额)As全年合计From病人费用汇总b));!!!!!!!6楼的结果中序号为9的数据中99.99是什么??????我测试过了没有出现问题哦。SQLSelectc.月份,c.收入合计,round((c.收入合计/d.全年合计)*100,2)As所占比例2From3(Selectto_char(a.日期,'MM')||'月'As月份,Sum(a.实收金额)As收入合计4From病人费用汇总a5GroupByto_char(a.日期,'MM')||'月')C,6(Select'全年总计'As月份,Sum(b.实收金额)As全年合计7From病人费用汇总b)D;结果:序号月份收入合计所占比例103月167636.81.19204月3141242.2622.31305月1270952.789.03406月150808310.71507月2571222.9118.26608月2981140.6421.18709月2226222.615.81810月2113291.59合计14077829.9999.99selectsum(实收金额)as合计from病人费用汇总;结果:合计14077829.99oracle只根据年份(如2011)查询每月统计数据检举|2011-8-1700:01提问者:sat111|浏览次数:359次问题补充:我需要只根据年份查询每月统计数据,如selectto_char(时间,'yyyy-mm')as每月时间,sum(统计数据)from测试表where时间=timegroupby每月时间注意只有一个传入参数time,比如time值为2011/7/118:42:43就查询出2011年第一天到最后一天的数据,不管time的月份日期为多少就只查询该年份第一天到最后一天的数据求解决方法~~~~~selectto_char(时间,'yyyy-mm')as每月时间,sum(统计数据)from测试表whereto_char(时间),'YYYY-MM-DD')like'2011%'groupbyto_char(时间,'yyyy-mm')selectto_char(时间,'yyyy-mm')as每月时间,sum(统计数据)from测试表whereto_char(时间,'YYYY')=to_char(time,'YYYY')groupby每月时间0|评论检举|2011-8-1710:04wangzhiqing999|十三级whereTRUNC(时间,'YYYY')=TRUNC(time,'YYYY')0|评论检举|2011-8-1710:1198稻草人|二级不知道你的时间和参数time分别是什么类型的,只能暂时考虑为vchar型的。selectto_char(时间,'yyyy-mm')as每月时间,sum(统计数据)from测试表wheresubstr(to_char(to_date('2011/7','YYYY/MM'),'YYYY/MM/DD'),0,4)=substr(t

1 / 52
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功