2017-02-22 36 views
-3

我的表如何計算分層表上子值的總和?

create table tbl_trial_balance 
(
    ID int primary key, 
    Name char(20) not null, 
    Parent_code int references tbl_trial_balance(ID), -- Self Join 
    Debit float, 
    Credit float 
) 
go 

INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(1,'Assets',null,null,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(2,'Current Assets',1,null,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(3,'Bank Account',2,null,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(4,'DBBL A/C',3,5000,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(5,'DBBL A/C',3,4000,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(6,'DBBL A/C',3,3000,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(7,'DBBL A/C',3,null,7000); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(8,'IFIC A/C',3,3000,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(9,'IFIC A/C',3,5000,null); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(10,'IFIC A/C',3,null,6000); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(11,'IFIC A/C',3,null,9000); 
INSERT INTO tbl_trial_balance (ID,Name,Parent_code,Debit,Credit) values(112,'IFIC A/C',3,null,8000); 
go 

我想從一個特定節點的所有子值求和。例如,對於頂級Assets注我想到:

Name  Debit   Credit 
Assets 20000   30000 

對於第二級Current Asset節點,我希望:

Name    Debit   Credit 
Current Asset 20000   30000 

我不能做一個簡單的GROUP BY:

select 
    Name, 
    SUM(Debit), 
    SUM(Credit) 
FROM tbl_trial_balance 
GROUP BY Name 

這怎麼辦?

+0

你必須給我們什麼你實際上是試圖實現更多的信息。你能否也請與我們分享你到目前爲止所嘗試過的? –

+1

在發佈問題之前,請閱讀[如何提出一個好問題?](http://stackoverflow.com/help/how-to-ask)。使用*適當的*標題,說明問題所在以及您嘗試的內容。 「我無法獲得數據」是指沒有使用* query *的情況。如果你不解釋你所期望的和你得到的東西,解決這個問題是不可能的。 'SELECT * FROM tbl_trial_balance'顯然可以工作 –

+0

我正在創建試用天平 –

回答

0

OK,如果所需的輸出一個錯字,那麼你可以使用這個:

;with x as (
    select ID,Name,Parent_code,Debit,Credit from tbl_trial_balance where parent_code is null 

    union all 

    select t.ID, x.name, t.Parent_code, t.Debit, t.Credit from tbl_trial_balance t join x on t.parent_code = x.id 
) 
select name, sum(credit) credit, sum(debit) debit from x group by name