Как создать инкрементное число в Oracle SQL запрос без создания какой-либо таблицы? Я пытался использовать предложение «с», но мне не удалось получить ожидаемый результат. Я использую оракул 10г
Вот код, который я пытаюсь, кажется, не работает:
WITH
TABLE3 AS ( SELECT 2008 YEARS FROM dual WHERE 1=1
union all
select t3.YEARS+1 from TABLE3 t3
WHERE 1=1 AND t3.YEARS < 2011
)
select YEARS from TABLE3
ожидаемый результат, который я хочу, это:
2008
2009
2010
2011
oracle-10g
50LV3R
источник
источник
Я думаю, что это будет работать (основываясь на этой странице ( http://psoug.org/definition/LEVEL.htm ) в качестве отправной точки):
Это должно вернуть:
Настройте 2008 и 4, чтобы получить разные результаты.
источник
Похоже, что ОП пытался решить проблему с помощью рекурсивного подзапроса. Это не будет работать в 10g, потому что эта функциональность не была добавлена до 11.2, но в 11.2+ следующее также будет правильным решением проблемы.
Единственное, чего не хватало в запросе ОП, было
(YEARS)
.источник
WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
FROM dual
.dual
это таблица конкретного оракула. Другие базы данных, такие как MS SQL Sever, mysql, postgres, допускают такие операторы, какselect expression
. MySQL тоже знает двойную таблицуПочему бы просто не создать последовательность?
РЕДАКТИРОВАТЬ:
Для небольших диапазонов значений последовательности вы можете использовать что-то вроде этого:
Вам просто нужна таблица с достаточным количеством строк.
источник
Вот пример добавления нескольких флагов и увеличения их на основе оператора case.
- Результат ниже
источник
Увеличивайте только в одном с rownum, выберите rownum + 100 из «столового» порядка на 1;
Этот результат с 101, 102 и т. Д.
источник