Подсчет суммы погашений

Есть у меня запрос, который выводит все погашения которые попадают под условия:

select MAX(a.ActualFinishDate) as ActualFinishDate, b.Amount
From Terrasoft.dbo.tbl_Task a
join Terrasoft.dbo.tbl_Repayment b on a.DebtID=b.DebtID
join Terrasoft.dbo.tbl_Debt c on c.ID=b.DebtID
join Terrasoft.dbo.tbl_Contact d on d.ID=c.ContactID
left join terrasoft.dbo.tbl_Contact f on f.ID = b.OwnerHCID
left join terrasoft.dbo.tbl_Contact fff on fff.ID = b.ContactID
left join terrasoft.dbo.tbl_CityHC g on g.ID = c.CityHCID
join terrasoft.dbo.tbl_Account e on e.ID = c.BankAccountID
join terrasoft.dbo.tbl_Currency h on h.ID = b.CurrencyID
where b.RedempDate between '01-03-2012' and '31-03-2012'
and a.ActualFinishDate = b.RedempDate and DATEDIFF(DAY, a.ActualFinishDate, b.RedempDate) = '45'
and a.Title like '%выезд%'
and a.StatusID = 'F598ECDB-4EEF-4FA8-9E69-A36B053501E5'
and b.OwnerLCID is null and b.OwnerHCID is not null and b.ContactID is not null
group by b.Amount, b.RedempDate, c.Number, d.Name, c.BankAccountID, f.Name,
g.Name, e.Name, h.Division, h.Currency, fff.Name, b.ID
order by d.Name

у меня берется макс дата задачи, среди дат которые попадают под условия
и потом берутся только погашения. у которых дата погашения больше вот этой макс даты задачи.
Подскажите, как получить сумму этих погашений??
У меня уже мозг плывет.)
Спасибо.

Нравится

5 комментариев

select MAX(a.ActualFinishDate) as ActualFinishDate, b.Amount
From Terrasoft.dbo.tbl_Task a
join Terrasoft.dbo.tbl_Repayment b on a.DebtID=b.DebtID
join Terrasoft.dbo.tbl_Debt c on c.ID=b.DebtID
where b.RedempDate between '01-03-2012' and '31-03-2012'
and a.ActualFinishDate <= b.RedempDate and DATEDIFF(DAY, a.ActualFinishDate, b.RedempDate) <= '45'
and a.Title like '%выезд%'
and a.StatusID = 'F598ECDB-4EEF-4FA8-9E69-A36B053501E5'
and b.OwnerLCID is null and b.OwnerHCID is not null and b.ContactID is not null
group by b.Amount, b.RedempDate, b.ID

Убрал лишнее для суммы.

Вадим,

вывести сумму по конкретному типу (или по всей выборке) можно при помощи SUM OVER. Пример:

SELECT MAX(a.ActualFinishDate) as ActualFinishDate, b.Amount, SUM(b.Amount) OVER (PARTITION BY a.StatusID) AS "Amount SUM" FROM Terrasoft.dbo.tbl_Task a
join Terrasoft.dbo.tbl_Repayment b on a.DebtID=b.DebtID
 join Terrasoft.dbo.tbl_Debt c on c.ID=b.DebtID
 where b.RedempDate between '01-03-2012' and '31-03-2012'
 and a.ActualFinishDate <= b.RedempDate and DATEDIFF(DAY, a.ActualFinishDate, b.RedempDate) <= '45'
 and a.Title like '%выезд%'
 and a.StatusID = 'F598ECDB-4EEF-4FA8-9E69-A36B053501E5'
 and b.OwnerLCID is null and b.OwnerHCID is not null and b.ContactID is not null
 group by b.Amount, b.RedempDate, b.ID

Перефразирую

Мне нужна сумма всех amount-ов с этой выборке:

select MAX(a.ActualFinishDate) as ActualFinishDate, b.Amount
From Terrasoft.dbo.tbl_Task a
join Terrasoft.dbo.tbl_Repayment b on a.DebtID=b.DebtID
join Terrasoft.dbo.tbl_Debt c on c.ID=b.DebtID
where b.RedempDate between '01-03-2012' and '31-03-2012'
and a.ActualFinishDate <= b.RedempDate and DATEDIFF(DAY, a.ActualFinishDate, b.RedempDate) <= '45'
and a.Title like '%выезд%'
and a.StatusID = 'F598ECDB-4EEF-4FA8-9E69-A36B053501E5'
and b.OwnerLCID is null and b.OwnerHCID is not null and b.ContactID is not null
group by b.Amount, b.RedempDate, b.ID

где MAX(a.ActualFinishDate) as ActualFinishDate используется в селекте только для того чтобы выборка была такой как мне нужно, мне же нужно что то типа следующего:

просуммировать все проплаты гре проплата попадает под условие:
Amount = (select MAX(a.ActualFinishDate) as ActualFinishDate, b.Amount
From Terrasoft.dbo.tbl_Task a
join Terrasoft.dbo.tbl_Repayment b on a.DebtID=b.DebtID
join Terrasoft.dbo.tbl_Debt c on c.ID=b.DebtID
where b.RedempDate between '01-03-2012' and '31-03-2012'
and a.ActualFinishDate <= b.RedempDate and DATEDIFF(DAY, a.ActualFinishDate, b.RedempDate) <= '45'
and a.Title like '%выезд%'
and a.StatusID = 'F598ECDB-4EEF-4FA8-9E69-A36B053501E5'
and b.OwnerLCID is null and b.OwnerHCID is not null and b.ContactID is not null
group by b.Amount, b.RedempDate, b.ID)

В общем есть 2 таблицы
t1 - погашения
t2 - задачи
нужна сумма t1.amount
где t1.RedempDate between '01-03-2012' and '31-03-2012' и MAX(t2.ActualFinishDate)=ActualFinishDate где ActualFinishDate <= t2.RedempDate and DATEDIFF(DAY, t2.ActualFinishDate, t1.RedempDate) <= '45'

как то так
-------------------------
пример t1
amount - redempdate-debtiD
100 - 10.04.2012 - 15
150 - 05.02.2012 - 15
200 - 15.04.2012 - 15

t2
ActualFinishDate - DebtID
09.04.2012 - 15
12.04.2012 - 15

То sum(amount) - 300

Чтобы получить сумму всех amount в заранее подготовленной выборке SELECT, можно поместить эту выборку в секцию FROM.
Получится что-то вроди такого:

select SUM(t.Amount) from (
select MAX(a.ActualFinishDate) as "ActualFinishDate", b.Amount as "Amount"
From Terrasoft.dbo.tbl_Task a
join Terrasoft.dbo.tbl_Repayment b on a.DebtID=b.DebtID
join Terrasoft.dbo.tbl_Debt c on c.ID=b.DebtID
where b.RedempDate between '01-03-2012' and '31-03-2012'
and a.ActualFinishDate <= b.RedempDate and DATEDIFF(DAY, a.ActualFinishDate, b.RedempDate) <= '45'
and a.Title like '%выезд%'
and a.StatusID = 'F598ECDB-4EEF-4FA8-9E69-A36B053501E5'
and b.OwnerLCID is null and b.OwnerHCID is not null and b.ContactID is not null
group by b.Amount, b.RedempDate, b.ID) as t

СПАСИБО!!!!!!
Я знал что это элементарно просто, просто не знал как)

Показать все комментарии