我想基于该表的数量从表中的一行获得多个结果。
ID | count A | 12 B | 138
因此,我希望查询的输出为A的12倍(无论是否使用计数器)和B的138倍。我已经看到了在DB上添加计数表的解决方案,但我无法做到这一点。
您可以使用相关的分层查询:
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