我有一个表,有两列,如Minvalue和Maxvalue,值如下
Minvalue | Maxvalue
5 | 12
想写一个SQL查询来显示最小值和最大值范围之间的数字序列,如下
Output
Values
--------
5
6
7
8
9
10
11
12
提前感谢
CONNECT BY LEVEL
子句可以用于此。它将生成一个从LEVEL=1开始的列表。LEVEL BETWEEN x and y
不起作用,但解决方法是:
- 循环通过间隙(介于5和12之间(,并将起始值添加到每个条目。您需要调整LEVEL从1开始,而不是从0开始
SELECT level + 4 FROM dual
CONNECT BY LEVEL <= 8
- 使用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
根据参数连接
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