0
ランニングバランスに関する助けが必要です。私はすでに終わりのバランスを取っています。しかし、私はまた、最初のバランスを作りたい。私の残高は "386240.00"です。私のスクリーンショットでは、「実行」列は終了時の残高です。どちらが正しいのか、そして「プリンシパル」から行ごとに差し引かれます。しかし、私は最初のバランス "bal_run"列を試しているとき、計算は "プリンシパル"からのベースにする必要があります。 "bal_run"の最初の行は正しいですが、2行目は "プリンシパル"の1行目より少なくなります。TSQLを使用してランニングバランスを計算する
私はあなたがこのような合計のためにウィンドウを使用する必要があるかもしれませんSQL Serverの2014
CREATE PROC spAppPaymentSchedRB @RENum as varchar(150), @Amount as decimal(19, 6)
AS
--SET @Amount = @Amount - (-664250.000000 * -1.00)
DECLARE @TotalAmount as money, @ItemCode as varchar(50), @BegBal as money
SELECT @ItemCode = U_App_ItemCode FROM [@APP_OAMS] WHERE U_App_DocNum = @RENum
SELECT @BegBal = U_APPRE_Begbal FROM OITM WHERE ItemCode = @ItemCode
IF @BegBal > 0.00
BEGIN
SELECT @Amount = @BegBal
END
;WITH schedRB as
(
SELECT
U_App_RBTerm 'Term'
, a.U_App_DocNum 'Trans No.'
, IsNULL(CASE WHEN b.U_App_InvNo = 0 THEN '' ELSE b.U_App_InvNo END, '') 'Inv#'
, IsNULL(CASE WHEN b.U_App_PaymentNum = 0 THEN '' ELSE b.U_App_PaymentNum END, '') 'Payment#'
, U_App_RBDesc 'Description'
, U_App_RBDate 'Date'
, IsNULL(B2.SumApplied, U_APP_RBayment) 'Payment' /*BTG 3/16/2017 - Include total amount paid*/
, U_APP_RBInterest 'Interest'
, U_APP_RBPrincipal 'Principal'
, U_APP_RBPRB 'Principal Running Bal.'
, U_APP_RBRRB 'Receivable Running Bal.'
, U_APP_PrincipalBal 'Principal_Balance'
, a.U_APP_UserSign
, a.Code
, a.U_App_LineNum
, a.U_App_VisOrder
FROM [@APP_TRBS] a
LEFT JOIN [@APP_AMS3](NOLOCK) b ON a.U_App_DocNum = b.U_App_DocNum AND a.U_App_VisOrder = b.U_App_VisOrder /*BTG 2/27/2017 - Old a.U_App_LineNum = b.U_App_LineNum */
/*BTG 3/16/2017 - Include total amount paid*/
LEFT JOIN ORCT B1 on b.U_App_PaymentNum = B1.DocNum
LEFT JOIN RCT2 B2 on B1.Docnum = b2.DocNum AND b.U_App_InvNo = b2.DocEntry /*BTG 2/27/2017 - added B.U_App_InvNo = b2.DocEntry for Filtering*/
WHERE (a.U_App_LineStatus <> 'Y' OR a.U_App_LineStatus IS NULL) AND a.U_App_DocNum = @RENum
UNION ALL
SELECT
b.U_App_RBTerm 'Term'
, a.U_App_DocNum
, '' 'Inv#'
, U_App_PaymentNum 'Payment#'
, '' 'Description'
, U_App_PCheckDate 'Date'
, U_App_PAmount 'Payment'
, 0.00 'Interest'
, 0.00 'Principal'
, 0.00 'Principal Running Bal.'
, 0.00 'Receivable Running Bal.'
, 0.00 'Principal_Balance'
, '' 'U_App_UserSign'
, '' 'Code'
, a.U_App_LineNum
, b.U_App_VisOrder
FROM [@APP_BMS3] a
INNER JOIN [@APP_TRBS] b ON a.U_App_DocNum = b.U_App_DocNum AND a.U_App_LineNum = b.U_App_LineNum AND a.U_App_DocNum = @RENum
)
SELECT
Term
, [Trans No.]
, [Inv#]
, [Payment#]
, Description
, Date
, Payment
, Interest
, Principal
, CASE WHEN @Amount - sum(Principal) over (order by CAST(U_App_VisOrder as decimal(19, 2)) /*Date*/) < -100.00 THEN 0.00 ELSE @Amount - sum(Principal) over (order by CAST(U_App_VisOrder as decimal(19, 2)) /*Date*/) END as 'Principal Running Bal.'
, [Receivable Running Bal.]
, U_APP_UserSign
, Code
, U_App_LineNum
, U_App_VisOrder
, @Amount - CASE WHEN Description = 'Installment 1' THEN 0.00 ELSE sum(Principal_Balance) over (order by CAST(U_App_VisOrder as decimal(19, 2))/*Date*/) END 'bal_run'
, @Amount - sum(Principal) over (order by CAST(U_App_VisOrder as decimal(19, 2)) /*Date*/) 'run'
INTO #TEMP
FROM schedRB --WHERE U_App_LineNum <> 0
SELECT *, (SELECT TOP 1 run FROM #TEMP ORDER BY CAST(U_App_VisOrder as decimal(19, 2)) DESC) 'run2' FROM #TEMP
ORDER BY CAST(U_App_VisOrder as DECIMAL(19, 4))
DROP TABLE #TEMP
;
GO
/*How to use*/
EXEC spAppPaymentSchedRB '685', 386240.00
使用しているどのようなデータベース? –
私はSQL Server 2014を使用しています。 –
これをチェックしてください:[ベストプラクティスの実行方法](https://sqlperformance.com/2012/07/t-sql-queries/running-totals) –