|
此文章由 bffbffbff 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bffbffbff 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 alan 于 2010-10-6 15:15 发表 
确实是这样。如果第二张表的记录double一遍,即再执行一遍
insert into #b values (1, 100)
insert into #b values (2, 300)
insert into #b values (4, 500)
insert into #b values (5, 200)
那么您的句子,会出问题。 ...
这个倒不复杂,没什么变化,只不过Id不是key,记录变重复了,你只要在call cte之前把数据给合并一下就好了, 不过合并的时候不一定总是sum(这里的例子我猜你是想计算总和), 有时候也可能是avg, max等等,得根据要求来运算
create table #a (Id int, parentID int )
create table #b (Id int, AMT int )
insert into #a values (1, null)
insert into #a values (2, 1)
insert into #a values (3, 1)
insert into #a values (4, 2)
insert into #a values (5, 3)
insert into #b values (1, 100)
insert into #b values (2, 300)
insert into #b values (4, 500)
insert into #b values (5, 200)
insert into #b values (1, 100)
insert into #b values (2, 300)
insert into #b values (4, 500)
insert into #b values (5, 200)
create table #b2 (Id int, AMT int )
insert into #b2
select Id, sum(isnull(AMT, 0))
from #b
group by Id
;WITH Tem(NId, CId, AMT)
AS
(
SELECT a.id AS Nid, a.id AS CId,ISNULL(b.AMT, 0) AS AMT
FROM #a a
LEFT JOIN #b2 b on a.id = b.id
UNION ALL
SELECT t.Nid, a2.Id AS CId, isnull( (SELECT b2.AMT FROM #b2 b2 WHERE a2.Id = b2.Id) , 0) AS AMT
FROM Tem t
JOIN #a a2 ON isnull(a2.parentId, 0) = t.CId
)
select NId, sum(AMT) as AMT
from Tem
group by NId
drop table #a
drop table #b
drop table #b2
[ 本帖最后由 bffbffbff 于 2010-10-6 15:34 编辑 ] |
|