日期:2014-05-18  浏览次数:20956 次

求SQL中用递归....
结构如下;

A  B(数值)       parent
01       5        
02       3                   01
03       4                   02

求03的值=(03的B)*(03的上一级的B)*(03的上上一级的B)

就是如是 03有N个上级,就要把它的N个上级的值相乘再乘03的值

要求要在SQL中完成....

------解决方案--------------------
单单sql可能很难搞定吧,可以用存储过程:
declare
n_sum number(10);
cursor cc is
select a,b,pa from test
connect by a = prior pa
start with a= '03 ';

begin
n_sum:=1;
for v in cc loop
n_sum:=n_sum*v.b;
end loop;
dbms_output.put_line(n_sum);

end;
------解决方案--------------------
declare @value int, @parent varchar(20), @final int
select @value=B, @parent=parent from 表 where A= '03 '
set @final=@value
while (@parent is NOT NULL AND @parent NOT LIKE ' ')
begin
select @value=B, @parent=parent from 表 where A=@parent -- 选出parent
@final = @final*@value -- 乘起来
end

print @final --最后的结果
------解决方案--------------------
不清楚你具体的表格内数据格式,所以只能写了一些示例。你的要求用单条的SQL很难完成的,写一个存储过程来调用会比较合适。其实这个和递归的道理是一样的。你需要根据你的程序进行修改。今天比较忙代码没有测试过,不好意思。

思路:循环读取数据,当parent为空的时候停止,并将数据输出。
1、根据所给的列A数据读出当前的列B和parent,将@total=B;
2、循环,停止条件为parent为空,接下来是循环体;
3、循环体内,根据where A=@parent,拿到parent的B,将B累乘到@total中;拿到parent的parent,供下一次循环判断;
4、循环结束后,输出total