Jak utworzyć liczbę przyrostową w zapytaniu SQL Oracle bez tworzenia tabeli? Próbowałem użyć klauzuli „z”, ale nie udało mi się uzyskać oczekiwanego rezultatu. Używam Oracle 10g
oto kod, który próbuję, wydaje się nie działać:
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
oczekiwany wynik, który chcę:
2008
2009
2010
2011
oracle-10g
50LV3R
źródło
źródło
Myślę, że to zadziała (na podstawie tej strony ( http://psoug.org/definition/LEVEL.htm ) jako punkt wyjścia):
To powinno zwrócić:
Dostosuj 2008 i 4, aby uzyskać różne wyniki.
źródło
Wygląda na to, że OP próbował rozwiązać problem za pomocą rekurencyjnego podkwerendy. To nie zadziała w 10g, ponieważ ta funkcjonalność została dodana dopiero w 11.2, ale w 11.2+ następujące rozwiązanie byłoby również poprawnym rozwiązaniem problemu.
Jedyne, czego brakuje w zapytaniu PO, to
(YEARS)
.źródło
WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
FROM dual
.dual
jest tabelą specyficzną dla wyroczni. Inne bazy danych, takie jak MS SQL Sever, mysql, postgres pozwalają na instrukcje takie jakselect expression
. mysql zna również podwójny stółDlaczego nie stworzyć sekwencji?
EDYTOWAĆ:
W przypadku małych zakresów wartości sekwencji można użyć czegoś takiego:
Potrzebujesz tylko tabeli z wystarczającą liczbą wierszy.
źródło
Oto przykład dodawania wielu flag i zwiększania wartości na podstawie instrukcji case.
- Zestaw wyników znajduje się poniżej
źródło
Zwiększ tylko w jednym z rownum wybierz rownum + 100 z „tabeli” o 1;
Ten wynik z 101, 102 itd.
źródło