如何在不创建任何表的情况下在oracle sql查询中创建增量数?我曾尝试使用“with”子句,但没有得到预期的结果。我正在使用 oracle 10g
这是我尝试的代码,它似乎不起作用:
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
Run Code Online (Sandbox Code Playgroud)
我想要的预期结果是:
2008
2009
2010
2011
Run Code Online (Sandbox Code Playgroud)
Ker*_*tts 16
我认为这会起作用(基于此页面(http://psoug.org/definition/LEVEL.htm)作为起点):
WITH counter
AS ( SELECT LEVEL seq
FROM DUAL
CONNECT BY LEVEL <= 4 )
SELECT (2008 + seq - 1) myYear
FROM counter
ORDER BY 1
;
Run Code Online (Sandbox Code Playgroud)
这应该返回:
myYear
------
2008
2009
2010
2011
Run Code Online (Sandbox Code Playgroud)
调整 2008 和 4 以获得不同的结果。
Ale*_*ole 14
类似于 Kerri 的答案,但没有with
(并受到SO 答案的启发):
SELECT 2007 + LEVEL AS YEARS
FROM DUAL
CONNECT BY LEVEL <= 4;
YEARS
----------
2008
2009
2010
2011
Run Code Online (Sandbox Code Playgroud)
或者,如果您的目标是获得当前年份之前的三个年份,而无需硬编码开始年份:
SELECT EXTRACT(YEAR FROM SYSDATE) + 1 - LEVEL AS YEARS
FROM DUAL
CONNECT BY LEVEL <= 4
ORDER BY YEARS;
Run Code Online (Sandbox Code Playgroud)
看起来 OP 试图使用递归子查询来解决问题。这在 10g 中不起作用,因为直到 11.2 才添加该功能,但在 11.2+ 中,以下内容也将是该问题的有效解决方案。
WITH T3(Years) AS (
SELECT 2008 Years FROM dual
UNION ALL
SELECT Years + 1 FROM T3 WHERE Years < 2011
)
SELECT * FROM T3;
Run Code Online (Sandbox Code Playgroud)
OP 的查询中唯一缺少的是(YEARS)
.
归档时间: |
|
查看次数: |
103350 次 |
最近记录: |