• 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

    结果展示:

  • 相关阅读:
    Lua metatable & metamethod
    lua 中的点、冒号与self
    Eclipse 快捷键
    logging的使用
    URL转义字符
    UnicodeEncodeError: ‘ascii’ codec can’t encode
    Baidu URL的部分参数
    使用JS伪造Post请求
    print 不换行
    exception keynote
  • 原文地址:https://www.cnblogs.com/jason2018524/p/10288258.html
Copyright © 2020-2023  润新知