小编典典

如何复制我的SQL结果?

sql

我想基于该表的数量从表中的一行获得多个结果。

ID | count
A  | 12
B  | 138

因此,我希望查询的输出为A的12倍(无论是否使用计数器)和B的138倍。我已经看到了在DB上添加计数表的解决方案,但我无法做到这一点。


阅读 209

收藏
2021-04-07

共1个答案

小编典典

您可以使用相关的分层查询:

SELECT t.id, r.COLUMN_VALUE, t.cnt
FROM   table_name t
       CROSS JOIN
       TABLE(
         CAST(
           MULTISET(
             SELECT LEVEL
             FROM   DUAL
             CONNECT BY LEVEL <= t.cnt
           )
           AS SYS.ODCINUMBERLIST
         )
       ) r;

或递归子查询分解子句:

WITH row_generator ( id, lvl, cnt ) AS (
  SELECT id, 1, cnt
  FROM   table_name
UNION ALL
  SELECT id, lvl + 1, cnt
  FROM   row_generator
  WHERE  lvl < cnt
)
SELECT *
FROM   row_generator
ORDER BY id, lvl

因此对于测试数据:

CREATE TABLE table_name ( ID, cnt ) AS
SELECT 'A',  12 FROM DUAL UNION ALL
SELECT 'B', 138 FROM DUAL

这两个解决方案都将输出:

ID | COLUMN_VALUE | 碳纳米管
:-| -----------:| | -:
A | 1 | 12
A | 2 | 12
A | 3 | 12
          ...
A | 10 | 12
A | 11 | 12
A | 12 | 12
B | 1 | 138
B | 2 | 138
B | 3 | 138
B | 4 | 138
          ...
B | 136 | 138
B | 137 | 138
B | 138 | 138
2021-04-07