Oracle的connect by level的使用

Oracle的connect by level的使用

获取连续数字示例代码:

1 -- 获取连续的数据(注意:level只用使用<,<=,=符号)
2 select level from dual connect by level <= 5

结果展示:

 

获取连续的日期示例代码:

1 -- 获取连续的指定时间(注意:获取连续的时间需要包含当天需要再+1天)
2 select sysdate-level+1 days from dual connect by level <= 5

结果展示:

 

统计填充示例代码:

 1 /*
 2     问题:查询1981年每月入职的人数,没有入职的以0补充
 3     解决:1.创建一个连续的年份表进行关联
 4          2.关联的条件,截取时间相等进行关联
 5          3.注意:a.需要所有的时间,因此要让时间表主表
 6                 b.如果emp表有条件,要单独在(SELECT * FROM emp)中添加,不然会影响结果,导致时间不全
 7                 c.使用其他函数,如SUM求和可能为空用NVL函数,这里以count函数举例
 8 */
 9 SELECT times.days 月份,NVL(COUNT(e.EMPNO),0) 入职人数 FROM (SELECT * FROM emp) e
10 RIGHT JOIN (
11     select TO_CHAR(ADD_MONTHS(TO_DATE('1981-12-01', 'yyyy-MM-dd'),-LEVEL+1),'yyyy-MM') days 
12     FROM dual CONNECT BY LEVEL <= 12
13 ) times
14 ON SUBSTR(TO_CHAR(e.HIREDATE,'yyyy-MM-dd hh24:mi:ss'), 0, 7) = times.days
15 GROUP BY times.days
16 ORDER BY times.days

结果展示:

转载于:https://www.cnblogs.com/jason2018524/p/10288258.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值