日期:2014-05-17 浏览次数:20729 次
create table #data (ID int,ParentID int,Amount int)
insert #data select 1,0,12
insert #data select 2,1,23
insert #data select 3,1,37
insert #data select 4,2,60
;with cte as
(
select mid=ID, pid=ParentID, * from #data
union all
select a.mid, a.pid, b.* from cte a join #data b on a.ID=b.ParentID
)
select ID=mid, ParentID=pid, Amount=sum(Amount) from cte group by mid, pid
/*
结果
1,0,132
2,1,83
3,1,37
4,2,60
*/
------解决方案--------------------
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[ParentID] INT,[Amount] INT)
INSERT [tb]
SELECT 1,0,12 UNION ALL
SELECT 2,1,23 UNION ALL
SELECT 3,1,37 UNION ALL
SELECT 4,2,60
GO
--> 测试语句:
; with t as
(
SELECT * FROM [tb]
union all
select b.id,b.[ParentID],t.[Amount] from tb as b join t on b.id=t.ParentID
)
--1
--SELECT ID, ParentID, Amount=sum(Amount) from t group by ID, ParentID
--2
SELECT * FROM [tb] as a cross apply(select sum([Amount]) as [Amount] from t where a.id=t.id) app
/*
ID ParentID Amount Amount
1 0 12 132
2 1 23 83
3 1 37 37
4 2 60 60
*/