簡體   English   中英

如何計算 SQL Server 中的余額?

[英]How to calculate balance in SQL Server?

我有一個查詢結果是

Code      id    Date        Amount  Paid      Balance
------------------------------------------------------
INV-000001  0   10/25/2019  50000   420       0
INV-000001  0   10/25/2019  50000   90        0
INV-000001  0   10/25/2019  50000   100       0
INV-000002  0   10/30/2019  25000   0         0
INV-000003  0   10/30/2019  25000   0         0
INV-000004  0   10/30/2019  25000   0         0

我想用 SQL 計算余額。 例如,

在第一行,金額是 50000,支付 420 所以余額是 49580。在第二行余額將是 50000 - 90 -(第一​​行余額 420)= 49490

SELECT p.Code
    ,p.DATE
    ,p.STATUS
    ,'' AS Customer
    ,InvoiceAmount
    ,ISNULL(Paid, 0) AS Paid
    ,0 AS balance
FROM purchaseinvmaster p
LEFT OUTER JOIN InvoiceVoucherMap i ON i.InvoiceId = p.id
LEFT OUTER JOIN debitcreditmaster d ON i.VoucherId = d.id

您沒有提及您使用的是哪個數據庫,但您可以使用標准窗口函數來計算余額。 例如:

select
  *,
  amount - sum(paid) over(order by date) as balance
from t
SELECT  p.Code, 
         InvoiceAmount , ISNULL(Paid,0) as Paid,
        InvoiceAmount - SUM(ISNULL(Paid,0)) OVER (ORDER BY p.id ROWS UNBOUNDED PRECEDING) AS Balance
from purchaseinvmaster p

基於基本查詢中的ISNULL() ,我假設您正在使用 SQL Server,但這應該可以在大多數主要平台上進行細微調整。

我進一步假設DATE列只是一個日期,而不是日期時間。 這意味着我們需要對發生在同一日期的交易施加訂單。 為此,我采用了您的基本查詢並將其包裝在公共表表達式 (CTE) 中,並向結果添加了一個簡單的ROW-NUMBER() 你的一個表可能有一列建議更好的順序,但沒有一個,這也行。 它使用子句ORDER BY (SELECT 0)因為窗口函數需要一個 order by,但我們沒有要引用的排序列。

之后,在主查詢中,使用窗口SUM來獲取您的運行總付款。

WITH cte AS
(
  SELECT 
     p.Code
    ,p.DATE
    ,p.STATUS
    ,'' AS Customer
    ,InvoiceAmount
    ,ISNULL(Paid, 0) AS Paid
    ,ROW_NUMBER() OVER (PARTITION BY p.Code ORDER BY (SELECT 0)) AS OrdinalNbr
  FROM purchaseinvmaster p
  LEFT OUTER JOIN InvoiceVoucherMap i
    ON i.InvoiceId = p.id
  LEFT OUTER JOIN debitcreditmaster d
    ON i.VoucherId = d.id
)
  SELECT 
     Code
    ,DATE
    ,STATUS
    ,Customer
    ,InvoiceAmount
    ,Paid
    ,Balance = InvoiceAmount - (SUM(Paid) OVER (PARTITION BY Code ORDER BY OrdinalNbr))
  FROM 
    cte;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM