2011-12-07 29 views
0

有沒有辦法在Oracle SQL中使用select語句進行遞歸?如何僅使用select在SQL中進行遞歸?

例如,如何在不使用sum()的情況下對錶中的列進行求和?

+0

你可以舉一個使用虛擬數據集的例子嗎?在Oracle中使用CTE遞歸*是可能的,但是需要表結構來給你一個有意義的例子。另外,它並不是真正用於替換SUM(),所以一個示例數據集將提供這種最佳方法的線索。 – MatBailie

+0

我並不是說這是最好的解決方案,它是用於教育目的。如果你需要一個數據集,讓它成爲一個表,其中有一列叫做VAL,數據的自變量是1 3 56 7 98 12 – Yrogirg

+0

哪個版本的Oracle? *遞歸* CTE只有11g。 –

回答

2

答案this question證明遞歸在Oracle中,對於遞歸的CTE(甲骨文11日起)和甲骨文自己的CONNECT BY語法(Oracle 10g和更早的版本)。

-1
create table #temp (
id int, 
value int) 


insert into #temp values (1, 1) 
insert into #temp values (2, 2) 
insert into #temp values (3, 3) 

declare @sum int 
declare @biggest int 
select @biggest = max(id) from #temp 
select @sum = 0 

while @biggest != 0 
begin 
    select @sum = @sum + value from #temp where id = @biggest 
    select @biggest = @biggest - 1 
end 

select @sum 
+0

雖然這不是遞歸。我不知道爲什麼遞歸*特別*是必需的,但這是OP要求的... – MatBailie

+0

@ Dems humm和while循環?它可以被認爲是遞歸嗎? –

+0

遞歸是實體自我調用時(通常使用一組不同的參數)。循環與遞歸確實有一些共同之處,但就我所知,它們從來沒有被考慮過。 –