首页 > 解决方案 > 按潜在客户增量值连接 Oracle

问题描述

我有这张桌子

COL1 COL2
---------
A   1
B   5
C   12
D   14

我想得到另一个。也就是说,在到达每个 col1 的下一个 col2 之前,一行包含 COL1 和增量值。

COL1 COL2
---------
A   1
A   2
A   3
A   4
B   5
B   6
B   7
B   8
B   9
B   10
B   11
C   12
C   13
D   14

编辑:这是我迄今为止尝试过的。看来我离解决方案并不远,但正在努力比这更进一步。

WITH aux (
    col1,
    col2
) AS (
    SELECT
        'A',
        1
    FROM
        dual
    UNION ALL
    SELECT
        'B',
        5
    FROM
        dual
    UNION ALL
    SELECT
        'C',
        12
    FROM
        dual
    UNION ALL
    SELECT
        'D',
        14
    FROM
        dual
), aux1 AS (
    SELECT
        a.*,
        nvl(LEAD(a.col2) OVER(
            ORDER BY
                a.col2
        ), a.col2) h
    FROM
        aux a
)
SELECT
    *
FROM
    aux1
CONNECT BY level >= col2
           AND level <= h;

标签: sqloracle

解决方案


testseq 是包含您最初的 4 行的表。使用 Lead 为每个 col1 查找 col2 的停止值,并使用递归来迭代并创建其他行。

WITH xrows (col1, col2, lastcol2) AS (
        SELECT t.*, LEAD(col2) OVER (ORDER BY col1) - 1
          FROM testseq t
         UNION ALL
        SELECT col1, col2+1, lastcol2
          FROM xrows t
         WHERE col2 < lastcol2
     )
SELECT col1, col2
  FROM xrows
 ORDER BY col1, col2
;

在此处输入图像描述


推荐阅读