ÏÖÔÚÓÖÒ»Õűí½á¹¹ÈçÏ£º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
СµÜ£¬×î½üҪתÐÐÈ¥×öoracle¿ª·¢ÁË£¬ÓÉÓÚ´óѧ±Ïҵʱ£¬×ßÁ˸öÍä·£¬ÏÖÔÚºÜСÐÄ£¬ÎÊÏ£¬×öPL/SQLÓÐûÓÐǰ;£¿£¿£¿
µ±È»ÎÒ˵µÄÕâ¸öǰ;ÊÇÖ¸ ÒÔºóÒªÌø²Û£¬Êг¡¶ÔÕâÑùµÄÈ˲ŵÄÐèÇóÁ¿´ó²»´ó£¿£¿
3q ÄÇ¿´À´»¹Ö»ÄÜÏȽӴ ......
¸Õ¸Õ½Ó´¥MySQL,²»ÖªµÀ¸ÃÈçºÎÈ¥²é¿´Êý¾Ý£¬²åÈëÊý¾Ý£¬´´½¨Êý¾Ý¿â¡¢±í£¬ÓÃÄÄΪǰ±²ÄÜÖ¸½ÌÒ»¶þ£¿
MySQL 5.1²Î¿¼ÊÖ²á
ÒýÓÃ
ÐÖµÜÄã»á½áÌùÂð£¿
mysql ²Î¿¼ÊÖ²á
baidu
MySQL¹Ù·½Îĵµ http://dev.mysql.com/doc ......