建表语句:
CREATE TABLE t20(ID NUMBER(2),
s NUMBER(5),
e NUMBER(5));
INSERT INTO t20 VALUES(1,10,11);
INSERT INTO t20 VALUES(2,1,5);
INSERT INTO t20 VALUES(3,88,92);
COMMIT;
S为号段起点,E为号段终点,求出起点和终点之间的数(包括起点和终点)
思路:
首先需要用层次查询构造连续的数(ROWNUM+号段之间的差值)
SELECT MAX(e-s)+1 FROM t20;可以找到首尾相差最大是多少,然后通过connect BY 构造一组序列,再通过简单的加减法,就可以将要求的数字算出来。
那么写成
SELECT MAX(E - S) + 1 GAP FROM T20 CONNECT BY ROWNUM <= MAX(E - S) + 1;
这样写肯定不对,因为connect BY 后面不允许使用分组函数,所以需要在外面再套一层查询才行,
如下
SQL> SELECT ROWNUM DIS
2 FROM (SELECT MAX(E - S) + 1 GAP FROM T20)
3 CONNECT BY ROWNUM <= GAP;
DIS
----------
1
2
3
4
5