易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL递归求和问题

现在又一张表结构如下:Id 和 ParentId 表示父子关系,只有最底层叶节点num有值,
Id ParentId Name Num
1 0 A NUll
2 1 B NULL
3 1 C NULL
4 2 D 1
5 2 E 2
6 3 F 5
7 3 G 4

我想查询出:父节点num=sum(子节点num)效果如下:
Id ParentId Name Num
1 0 A 12
2 1 B 3
3 1 C 9
4 2 D 1
5 2 E 2
6 3 F 5
7 3 G 4

求SQl语句
在SQL2005 中新增CTE递归不知道怎么用

SQL code:
--> 测试数据:@tb
declare @tb table([Id] int,[ParentId] int,[Name] varchar(1),[Num] int)
insert @tb
select 1,0,'A',null union all
select 2,1,'B',null union all
select 3,1,'C',null union all
select 4,2,'D',1 union all
select 5,2,'E',2 union all
select 6,3,'F',5 union all
select 7,3,'G',4

;WITH Liang AS
(
SELECT Id,ParentId,total=0,flag=Id
from @tb WHERE Num IS NULL
UNION ALL
SELECT A.Id,A.ParentId,B.total+ISNULL(A.Num,0),B.flag
from @tb AS A
JOIN Liang AS B
ON A.ParentId=B.Id
)
UPDATE A SET
Num = B.total
from @tb AS A
JOIN (SELECT flag,SUM(total) AS total
from Liang GROUP BY flag) AS B
ON A.Id=B.flag;

SELECT * from @tb;

/*
Id


相关问答:

Asp+sql server问题 - Web 开发 / ASP

我一个项目,有个插入操作,具体是这样的:
我有进货信息表。在出货时选择相应的进货信息,输入数量,选择部门后,点保存按钮,由于网络延时,点一下没有反映,于是用户就又点一下,导致一次插入了两条记录:
例: ......

sql性能求助 - MS-SQL Server / 疑难问题

场景如下:
客户把备份好的数据库,发给我,我在本机还原后,运行写好的存储过程,比较快,并且在实施那边运行同样比较快。但是当实施在客户那边运行的时候速度就非常的慢,时间超出了程序的时间限制。远程在客户那 ......

ASP链接SQL的简单登陆界面 - .NET技术 / ASP.NET

protected void btnLogin_Click(object sender, EventArgs e)
  {
  SqlConnection conn = new SqlConnection("Server = (local);user id = sa;pwd = 1;database = Login");
&nb ......

SQL clr - MS-SQL Server / 非技术版

想用SQL CLR做如下的存储过程,但是发现报错: 
{由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。} 
而且如果数据从case 1通过时就是正确的,从case 2通过时错误 
并且在c ......

关于SQL Server Mobile Edition - .NET技术 / ASP.NET

关于SQL Server Mobile Edition
用Microsoft SQL Server2005 Management Studio Express9.00.3042.00创建SQLCE数据库sqlmobile.sdf
在mobile系统终端上用SQL Server Mobile Edition3.0能查看sqlmobile.sdf里表数据 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号