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

結果展示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM