0% found this document useful (0 votes)
321 views

SQL Server - SQL Getting Debit, Credit and Balance Issue - Database Administrators Stack Exchange

The document is a question on Database Administrators Stack Exchange asking how to retrieve debit, credit, and balance data from a statement table to show invoices with their receipt vouchers ordered underneath and ensure correct balances. One response suggests using row_number() to generate a sequence ordered by invoice ID, date, and type (receipt last), and calculate a running balance with that sequence. However, this does not match the expected output. Another response notes the expected output orders invoices in a way that balances are not running totals, and suggests the OP may be confused on how balances should be calculated. Clarification is needed on how to meet the unusual sorting specified in the expected output.

Uploaded by

Zaki Cade
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
321 views

SQL Server - SQL Getting Debit, Credit and Balance Issue - Database Administrators Stack Exchange

The document is a question on Database Administrators Stack Exchange asking how to retrieve debit, credit, and balance data from a statement table to show invoices with their receipt vouchers ordered underneath and ensure correct balances. One response suggests using row_number() to generate a sequence ordered by invoice ID, date, and type (receipt last), and calculate a running balance with that sequence. However, this does not match the expected output. Another response notes the expected output orders invoices in a way that balances are not running totals, and suggests the OP may be confused on how balances should be calculated. Clarification is needed on how to meet the unusual sorting specified in the expected output.

Uploaded by

Zaki Cade
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

12/5/2016

sqlserverSqlgettingdebit,creditandbalanceissueDatabaseAdministratorsStackExchange

DatabaseAdministratorsStack
Exchangeisaquestionandanswersite
fordatabaseprofessionalswhowishto
improvetheirdatabaseskillsandlearn
fromothersinthecommunity.Join
themitonlytakesaminute:

signup

login

tour

Here'showitworks:

Anybodycanask
aquestion

help

Anybodycan
answer

Thebestanswersarevoted
upandrisetothetop

Signup

Sqlgettingdebit,creditandbalanceissue

IamusingthequerybelowtogetDebit/CreditBalancefromtable

statement

SELECTt.[InvoiceID],t.S_TypeasType,
t.Date,t.Debit,t.Credit,b.Balance
FROMStatementastCROSSapply
(SELECTBalance=SUM(Debit)SUM(Credit)
FROMStatementasx
WHERE(x.date<t.dateor
x.date=t.date
)AND
x.CustID=t.CustID
)b
WHEREt.CustID='48'anddatebetween'20150101'and'20160101'
ORDERBYt.date

output
InvoiceIDTypeDateDebitCreditBalance
51ServiceInvoice20150829500.000.00500.00
51ReceiptVoucher201509070.00500.000.00
76ServiceInvoice201509281000.000.001500.00
208SalesInvoice20150928500.000.001500.00
119SalesInvoice20151031500.000.002000.00
76ReceiptVoucher201511210.00500.00500.00
208ReceiptVoucher201511210.00500.00500.00
119ReceiptVoucher201511210.00500.00500.00
165ServiceInvoice20151201500.000.001000.00
165ReceiptVoucher201512220.00500.00500.00
224ServiceInvoice20151231500.000.001000.00

First,howcanIgeteachReceiptVoucherunderitsinvoice?
Second,whenIhavetheReceiptVoucherwithsamedateastheinvoicehowcanIbesureitshowsundertheInvoiceusing
getcorrectvaluesforthebalance?

orderbytype

to

TheexpectedoutputinvoicesorderedbydateanditsReceiptVoucherunderit.
InvoiceIDTypeDateDebitCreditBalance
51ServiceInvoice20150829500.000.00500.00
51ReceiptVoucher201509070.00500.000.00
76ServiceInvoice201509281000.000.001000.00
76ReceiptVoucher201511210.00500.00500.00
208SalesInvoice20150928500.000.001000.00
208ReceiptVoucher201511210.00500.00500.00
119SalesInvoice20151031500.000.001000.00
119ReceiptVoucher201511210.00500.00500.00
165ServiceInvoice20151201500.000.001000.00
165ReceiptVoucher201512220.00500.00500.00
224ServiceInvoice20151231500.000.001000.00
sqlserver

sql sqlserver2008 runningtotals


editedJan15at1:23

askedJan12at3:10

PaulWhite
29.8k

12

user3403112
171

271

123

2Answers
http://dba.stackexchange.com/questions/125955/sqlgettingdebitcreditandbalanceissue

1/3

12/5/2016

sqlserverSqlgettingdebit,creditandbalanceissueDatabaseAdministratorsStackExchange

Themainthingyouneedistogeneratetherequiredordersequenceusingrow_number().
seq=row_number()over
(
partitionbyt.CustID
orderbyt.InvoiceID,
t.Date,
CASEWHENt.S_Type='ReceiptVoucher'THEN1ELSE2END
)

thanuseitforcalculationofthecumulativebalance
;
WITHcte
AS(
SELECTCustID,
[InvoiceID],
S_Type,
DATE,
Debit,
Credit,
seq=row_number()OVER(
PARTITIONBYCustID
ORDERBYInvoiceID,
DATE,
CASE
WHENS_Type='ReceiptVoucher'
THEN1
ELSE2
END
)
FROMStatement
)
SELECTc.[InvoiceID],
c.S_TypeASType,
c.DATE,
.Debit,
c.Credit,
b.Balance
FROMctec
CROSSAPPLY(
SELECTBalance=SUM(Debit)SUM(Credit)
FROMcteASx
WHEREx.CustID=c.CustID
ANDx.seq<=c.seq
)b
WHEREc.CustID='48'
ANDDATEBETWEEN'20150101'
AND'20160101'
ORDERBYseq
editedJan13at0:44

answeredJan12at8:53

Squirrel
176

1 Thisanswerdoesnotseemtoprovidethewantedoutput.ypercubeJan13at9:10

Iamnotnearacomputerwithanydatabaseonittotrythisideahoweverlookingatyour
"expectedoutput",theinvoiceorsalesnumberisanincrementingnumber(assuminginvoice208
isreallyatypoandshouldbeinvoice108).Haveyoutried'OrderbyInvoiceIDASC,Debit
Desc'?Itwillkeeppaymentsforeachinvoiceundertheinvoice.Anotherpossibilityissomething
like'OrderbyinvoiceID,ifdebit>0then0else1endif,date'.
answeredJan13at21:39

GDD
54

Basedonthedesiredoutputposted,theOPdoesn'tjustwanttochangethesortingfortheoutputtheywantthe
cumulativebalancetofollowthesamesortingaswell.AndriyMJan14at8:27
Idon'tagreewith@AndriyMtherunningbalanceisbasedon"owed"(invoices)minus"payments"(receipts)todate
asofeachtransaction.I'mkindaconfusedbysortingbycumulativebalance?GDDJan14at12:59

http://dba.stackexchange.com/questions/125955/sqlgettingdebitcreditandbalanceissue

2/3

12/5/2016

sqlserverSqlgettingdebit,creditandbalanceissueDatabaseAdministratorsStackExchange

@GDD:Well,yes,absolutely,runningtotals/balancesaretypicallycalculatedfollowingtheorderofeventsasthey
werehappening.Thedesiredoutputinthiscase,however,clearlyindicatesadifferentorder.It'sprobablyeasierto
seestartingwithInvoiceID76:+1000(Balance=1000),500(Balance=1000500=500),+500(thisisanewinvoice
nowbutBalance=1000,meaningitincludesthepreviousbalanceof500).I'mwithyouinthatit'sveryunusualand
I'mreadytoassumethattheOPmaybeconfused,butstill,that'sthesortingspecifiedsofar.AndriyMJan14at
13:13

http://dba.stackexchange.com/questions/125955/sqlgettingdebitcreditandbalanceissue

3/3

You might also like