递归公用表表达式应该能够给你你需要的数据。这个网站上的一个很好的问题/答案是here。
一个简单的例子,可以帮助你是这样的:
create table #Code
(
Code varchar(20),
Parent_Code varchar(20)
)
go
insert into #Code (Code, Parent_Code)
select 'H1', null
union
select 'H11', 'H1'
union
select 'H111', 'H11'
union
select 'H1111', 'H111'
union
select 'H1112', 'H111'
union
select 'H12', 'H1'
union
select 'H121', 'H12'
go
create table #CodeAmount
(
Code varchar(20),
Amount decimal
)
go
insert into #CodeAmount (Code, Amount)
select 'H1111', 100
union
select 'H1112', 200
union
select 'H121', 50
go
with CodeAmountRollup(Code, Parent_Code, Amount)
as
(
select c.Code, c.Parent_Code, ISNULL(ca.Amount, 0) as Amount from #Code c inner join #CodeAmount ca on c.Code = ca.Code
union all
select c.Code, c.Parent_Code, Amount as Amount from #Code c inner join CodeAmountRollup car on c.Code = car.Parent_Code
)
--select * from CodeAmountRollup
select Code, sum(Amount) as Amount from CodeAmountRollup group by Code
来源
2011-07-06 01:59:48
Nat
你能上传一个小的SQL语句来创建一个表并加载一些示例数据吗?这是很难读取您的文本语句 – Nat
可能重复的[SQL Server递归查询](http://stackoverflow.com/questions/3916597/sql-server-recursive-query) –
不是重复的,因为这个问题需要代码总和得到的金额。足以区分查询的怪癖 – Nat