【发布时间】:2020-03-17 15:23:57
【问题描述】:
我有两张表,我想获取所有帐户及其贷方金额和借方金额 即使是父记录也必须将它们的子值相加
我正在实现 Id ParentId 结构。
1- [AccountChart] 包含这些字段的表格:
Id smallint
ParentId smallint Null
AccountName nvarchar(100)
2- [Transaction] 包含这些字段的表
AccountId smallInt
TransactionDate DateTime
Debit decimal(19,5)
Credit decimal(19,5)
这是我尝试过的
Create table [AccountChart] (
id int not null,
parentId int null,
AccountName nvarchar(100)
PRIMARY KEY (ID)
)
Create table [TransactionData] (
id int not null,
TransactionDate DateTime not null,
AccountId int not null,
Credit decimal(19,5),
Debit decimal(19,5)
PRIMARY KEY (ID)
)
insert into [AccountChart] (id,parentId,AccountName) values (1,null,'level 0');
insert into [AccountChart] (id,parentId,AccountName) values (2,1,'level 2');
insert into [AccountChart] (id,parentId,AccountName) values (3,2,'level 3 - 1');
insert into [AccountChart] (id,parentId,AccountName) values (4,2,'level 3 - 2 ');
insert into [TransactionData] (id,TransactionDate,AccountId,Credit,Debit) values (1,'2020-03-17',3,1000.0,0.0)
insert into [TransactionData] (id,TransactionDate,AccountId,Credit,Debit) values (2,'2020-03-17',3,0.0,1000.0)
insert into [TransactionData] (id,TransactionDate,AccountId,Credit,Debit) values (3,'2020-03-17',4,4000.0,0.0)
insert into [TransactionData] (id,TransactionDate,AccountId,Credit,Debit) values (4,'2020-03-17',3,6000.0,0.0)
insert into [TransactionData] (id,TransactionDate,AccountId,Credit,Debit) values (5,'2020-03-17',4,3000.0,0.0)
;WITH cteBalances (AccountId, ParentId, Credit, Debit)
AS (SELECT
AccountChart.Id,
AccountChart.ParentId,
SUM([TransactionData].Credit) AS Credit,
SUM([TransactionData].Debit) AS Debit
FROM [TransactionData]
INNER JOIN AccountChart ON ([TransactionData].AccountId = AccountChart.Id)
GROUP BY AccountChart.Id,AccountChart.ParentId)
SELECT
AccountChart.id,
AccountChart.ParentId,
AccountChart.AccountName,
cteBalances.Credit,
cteBalances.Debit
FROM AccountChart
left JOIN cteBalances ON (AccountChart.ID = cteBalances.AccountID)
我无法为父记录带来汇总值的问题。
我得到的结果是:
id ParentId AccountName Credit Debit
1 NULL level 0 NULL NULL
2 1 level 2 NULL NULL
3 2 level 3 - 1 7000.00000 1000.00000
4 2 level 3 - 2 7000.00000 0.00000
但我希望像这样计算父母中的孩子
id ParentId AccountName Credit Debit
1 NULL level 0 14000.00000 1000.00000
2 1 level 2 14000.00000 1000.00000
3 2 level 3 - 1 7000.00000 1000.00000
4 2 level 3 - 2 7000.00000 0.00000
【问题讨论】:
-
能否提供一些示例数据和预期结果?
标签: sql sql-server database reporting database-administration