Задача: есть таблица с одним полем из целых положительных чисел. Нужно запросом вывести все числа столько раз, чему равно само число.
Последовательность |
---|
N |
1 |
3 |
2 |
Должно получиться |
---|
N |
1 |
3 |
3 |
3 |
2 |
2 |
SELECT q.n
FROM ( SELECT DISTINCT t.ROWID rn,
t.n,
LEVEL l
FROM test_numbers t
CONNECT BY LEVEL <= t.n) q
ORDER BY q.rn
Интересный вариант с рекурсивным запросом предложил Дмитрий Грачев. Обратите внимание, что такой пример сработает только начиная с 11-ой версии Oracle и результат, вообще говоря, будет отличаться от того, что выдаст первый пример:
WITH f(a, b)
AS (SELECT n a, n b
FROM test_numbers
WHERE n > 0
UNION ALL
SELECT a - 1, b
FROM f
WHERE a > 1)
SELECT b
FROM f
ORDER BY b