遞歸公用表表達式應該能夠給你你需要的數據。這個網站上的一個很好的問題/答案是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