【问题标题】:How to Populate the numbers between a range of two values using Oracle SQL如何使用 Oracle SQL 填充两个值范围之间的数字
【发布时间】:2021-09-04 20:14:07
【问题描述】:

我有一个表,有 2 列,例如 Minvalue 和 Maxvalue,值如下

Minvalue  |   Maxvalue
   5      |     12

想写一个 SQL 查询来显示最小值和最大值范围之间的数字序列,如下所示

Output

Values
--------
5
6
7
8
9
10
11
12

提前致谢

【问题讨论】:

    标签: sql oracle oracle11g oracle-sqldeveloper


    【解决方案1】:

    CONNECT BY LEVEL 子句可用于此目的。它将生成一个从 LEVEL = 1 开始的列表。LEVEL BETWEEN x and y 不起作用,但解决方法是:

    1. 遍历间隙(介于 5 和 12 之间)并将起始值添加到每个条目。您需要从 1 而不是 0 开始调整 LEVEL。
    SELECT level + 4 FROM dual 
    CONNECT BY LEVEL <= 8
    
    
    1. 使用 CTE
    WITH min_max(min_val, max_val) AS
    (SELECT 5 , 12 FROM DUAL)
    SELECT LEVEL + min_val - 1 
      FROM min_max CONNECT BY LEVEL <= (max_val - min_val) + 1
    

    【讨论】:

      【解决方案2】:

      根据参数连接

      with prms as (
        select 5 minval, 12 maxval from dual
      )
      select prms.minval + rownum - 1
      from prms connect by prms.minval + rownum - 1 <= prms.maxval
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 2014-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        相关资源
        最近更新 更多