求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