Oracle的connect by level的使用

1|0Oracle的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
复制代码

结果展示:


__EOF__

本文作者零下一度的微笑
本文链接https://www.cnblogs.com/jason2018524/p/10288258.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   零下一度的微笑  阅读(18552)  评论(1编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示