Oracle的connectbylevel的使⽤Oracle的connect by level的使⽤
获取连续数字⽰例代码:
1-- 获取连续的数据(注意:level只⽤使⽤<,<=,=符号)
2select level from dual connect by level<=5
结果展⽰:
获取连续的⽇期⽰例代码:
1-- 获取连续的指定时间(注意:获取连续的时间需要包含当天需要再+1天)
2select sysdate-level+1 days from dual connect by level<=5
结果展⽰:
统计填充⽰例代码:
1/*
connect和join的区别2问题:查询1981年每⽉⼊职的⼈数,没有⼊职的以0补充
3解决:1.创建⼀个连续的年份表进⾏关联
4 2.关联的条件,截取时间相等进⾏关联
5 3.注意:a.需要所有的时间,因此要让时间表主表
6 b.如果emp表有条件,要单独在(SELECT * FROM emp)中添加,不然会影响结果,导致时
间不全
7 c.使⽤其他函数,如SUM求和可能为空⽤NVL函数,这⾥以count函数举例
8*/
9SELECT times.days ⽉份,NVL(COUNT(e.EMPNO),0) ⼊职⼈数FROM (SELECT*FROM emp) e
10RIGHT JOIN (
11select TO_CHAR(ADD_MONTHS(TO_DATE('1981-12-01', 'yyyy-MM-dd'),-LEVEL+1),'yyyy-MM') days
12FROM dual CONNECT BY LEVEL<=12
13 ) times
14ON SUBSTR(TO_CHAR(e.HIREDATE,'yyyy-MM-dd hh24:mi:ss'), 0, 7) = times.days
15GROUP BY times.days
16ORDER BY times.days
结果展⽰:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论