2017-02-22 5 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ノートのために私は期待:セカンドレベルCurrent Assetノードに対して

Name  Debit   Credit 
Assets 20000   30000 

、私は期待して:

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)をお読みください。適切な*タイトルを使用して、問題の内容と試したことを説明してください。 "私はデータを得ることができません"とは*あなたが使った*クエリ*がなければ何も意味しません。あなたが何を期待し、何を得たのかを説明しなければ、これを解決することは不可能です。 'SELECT * FROM tbl_trial_balance'は明らかに動作します –

+0

私は' CREATE TABLE'ステートメントから明らかな試用残高 –

答えて

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 
関連する問題