Oracle
 sql >> Baza danych >  >> RDS >> Oracle

jak powielić moje wyniki sql?

Możesz użyć skorelowanego zapytania hierarchicznego:

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;

lub rekurencyjna klauzula faktoringowa podzapytania:

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

Więc dla danych testowych:

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

Oba te rozwiązania zwróciłyby:

ID | COLUMN_VALUE | CNT
:- | -----------: | --:
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

db<>graj tutaj




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 12c Redakcja danych

  2. Obrót w Oracle 11g

  3. Kiedy wartości kolumn indeksu Oracle są puste?

  4. Oracle — dlaczego początkowe zero liczby znika podczas konwersji TO_CHAR

  5. Jak przekonwertować wartości oddzielone przecinkami na wiersze w Oracle?