Как рассчитать дебетовое и кредитное сальдо в SQL Server? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть таблицы:

  • Клиент (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

1 Ответ

0 голосов
/ 06 марта 2019

Модифицированный запрос. (Извините за задержку)

ниже должны служить ваши потребности

SELECT 
    C.Id_Customer,
    CASE 
       WHEN ISNULL(R.[Money], 0) - ISNULL(P.[Money], 0)> 0 
          THEN ISNULL(R.[Money], 0) - ISNULL(P.[Money], 0)
    END AS [Debit balance],
    CASE 
       WHEN ISNULL(P.[Money], 0) - ISNULL(R.[Money], 0) > 0 
          THEN ISNULL(P.[Money], 0) - ISNULL(R.[Money], 0)
    END AS [In credit]

FROM
    Customer C
LEFT JOIN 
    (SELECT SUM([Money]) AS [Money],Id_Customer FROM Receipt GROUP BY Id_Customer) R ON C.Id_Customer = R.Id_Customer
LEFT JOIN 
    (SELECT SUM([Money]) AS [Money],Id_Customer FROM Payment GROUP BY Id_Customer)P ON C.Id_Customer = P.Id_Customer
...