У меня есть две таблицы, которые я хочу получить для всех учетных записей и их Кредитная сумма и Сумма дебета, даже если родительские записи должны суммировать их дочерние значения
Я реализую Id ParentId Structure.
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