У меня есть таблицы:
Клиент (Id_Customer, Имя, Адрес)
(1,A, Add1)
(2,B, Add2)
(3,C, Add3)
(4,D, Add4)
(5,E, Add5)
Квитанция (Id_Customer, Money)
(2, 10)
(3, 20)
(2, 15)
Оплата (Id_Customer, Money)
(1, 30)
(2, 40)
(4, 05)
Теперь я хочу показать, как показано ниже:
Name ------- Debit balance ------ In credit
A ----------------------------------------30
B ----------------15-------------------------
C -----------------------------------------20
D -------------- 05-----------------------
Total DB: ----- 20-------------Total IC: 50
В том:
if sum(money) of Receipt < sum(money) of Payment
then Debit balance = sum(money) of Payment - sum(money) of Receipt
else
In credit = sum(money) of Receipt-sum(money) of Payment
Обратите внимание, показывать клиенту можно только в том случае, если дебетовый остаток ИЛИ в кредите отличается от нуля. И итоги за () для подкачки.
Я работаю с QUERY, но ТОЛЬКО показываю Клиентов, у которых также есть «деньги» в двух таблицах Квитанция и Оплата (если у клиента есть только деньги в квитанции ИЛИ Оплата не будет отображаться в результате, почему это так? показать что клиент?)
select a.*, Total_DebitBalance=sum(DebitBalance) over (), Total_InCredit=sum(InCredit) over () from (SELECT C.name, C.Address,
CASE WHEN SUM(isnull(R.Money, 0))< SUM(isnull(P.Money, 0)) THEN SUM(isnull(P.Money, 0)) - SUM(isnull(R.Money, 0)) END AS DebitBalance,
CASE WHEN SUM(isnull(R.Money, 0))> SUM(isnull(P.Money, 0)) THEN SUM(isnull(R.Money, 0)) - SUM(isnull(P.Money, 0)) END AS InCredit,
C.Id_Customer, COUNT(*) OVER () AS total_count
FROM Customer C LEFT JOIN Receipt R ON C.Id_Customer = R.Id_Customer LEFT JOIN Payment P ON C.Id_Customer = P.Id_Customer group by C.Id_Customer, C.name, C.Address)a ;
Это результат:
Имя ------- Дебетовый баланс ------ В кредит
B ----------------15-------------------------
Total DB: ----- 15-------------Total IC: 0