Получить кредит и дебет в один ряд sql - PullRequest
1 голос
/ 05 февраля 2020

Я застрял в ситуации, чтобы найти отчет, связанный с аккаунтами. Мне нужно получить кредитный и дебетовый счет в одной строке ... с суммой

Моя таблица выглядит так:

Id  VoucherId   AccountId   Amount  AccountName IsDebit
1   1           26          100     Sales       0
2   1           10          100     Cash        1
3   2           26          200     Sales       0
4   2           10          200     Cash        1
5   3           10          150     Cash        0
6   3           20          150     Expense A   1
7   4           10          240     Cash        0
8   4           21          240     Expense B   1

и мне нужно получить такой результат VoucherId DebitName DebitID CreditName CreditID Amount<br> 1 Cash 10 Sales 26 100 2 Cash 10 Sales 26 200 3 Expense a 10 Cash 26 150 4 Expense b 10 Cash 26 240 я пробовал

select vc.Id,
am.Name,vc.AccountName,vd.[Description],
    case when vd.isdebit=1 then vd.amount else 0 end  as C6,
    case when vd.isdebit=1 then vd.AccountId else 0 end as A,
    case when vd.isdebit=0 then vd.amount else 0 end as C7,
    case when vd.isdebit=0 then vd.AccountId else 0 end as B
    from VoucherDetails vd 
    inner join Voucher Vc on vc.Id=vd.VoucherId and vc.IsDeleted=0
    inner join AccountsMaster Am on am.Id=vd.AccountId

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

просьба помочь .. спасибо заранее

Ответы [ 3 ]

1 голос
/ 05 февраля 2020

Как это?:

select VoucherId,
  max(case when IsDebit = 1 then AccountID end) DebitID,
  max(case when IsDebit = 1 then am.Name end) DebitName,
  max(case when IsDebit = 0 then AccountID end) CreditID,
  max(case when IsDebit = 0 then am.Name end) CreditName,
  Amount
from VoucherDetails vd
  join AccountsMaster am on am.Id = AccountID
group by VoucherId, Amount
order by VoucherId

Проверено здесь: http://sqlfiddle.com/#! 18/25162/13

1 голос
/ 05 февраля 2020

Это будет работать, если вы делаете двойную запись. То есть для каждой дебетовой записи должна быть также запись кредита.

select DrVoucherId as VoucherId,DebitName,DebitId,CreditName,CreditId,Amount from (
select VoucherId as DrVoucherId,AccountName as DebitName ,AccountId as DebitId from VoucherDetails where IsDebit=1
) a
left join
(select VoucherId as CrVoucherId,AccountName as CreditName ,AccountId as CreditId,Amount from VoucherDetails where IsDebit=0) b on  a.DrVoucherId=b.CrVoucherId
1 голос
/ 05 февраля 2020

Вам нужна агрегация:

select vc.Id, 
       sum(case when vd.isdebit = 1 then vd.amount else 0 end)  as C6,
       sum(case when vd.isdebit = 1 then vd.AccountId else 0 end) as A,
       sum(case when vd.isdebit = 0 then vd.amount else 0 end) as C7,
       sum(case when vd.isdebit = 0 then vd.AccountId else 0 end) as B
from VoucherDetails vd join
     Voucher Vc 
     on vc.Id = vd.VoucherId and vc.IsDeleted = 0 join
     AccountsMaster Am
     on am.Id = vd.AccountId
group by vc.Id
...