sql-server - sql - 显示我可以支付的所有分期付款

标签 sql-server sql-server-2008 tsql

我有一张表格,上面有来自不同客户的许多分期付款。每个客户都有可用余额。

我想显示客户可以支付的所有分期付款。

可用余额为 400 的客户 1 可用余额500的客户2

分期付款表:

Customer ID       Instalment amount   Available
1                 150                   400
1                 150                   400
1                 150                   400
1                 150                   400
1                 150                   400
1                 150                   400
1                 150                   400
2                 200                   500
2                 200                   500
2                 200                   500
2                 200                   500
2                 200                   500
2                 200                   500

下面是我想要的结果

Customer ID       Instalment amount   Available
1                 150                 400
1                 150                 400
2                 200                 500
2                 200                 500

下面的代码不工作

DECLARE @DrACAvailable decimal,
        @PayAmount decimal,
        @RunningTotal decimal

SET @RunningTotal = 0

DECLARE rt_cursor CURSOR
FOR
SELECT T2.PayAmount, T2.DrACAvailable
FROM LoanAutoPayTransactions T2 
INNER JOIN LoanAutoPayTransactions T1 on T2.LRAC=T1.LRAC


OPEN rt_cursor

FETCH NEXT FROM rt_cursor INTO @PayAmount, @DrACAvailable

WHILE @@FETCH_STATUS = 0
 BEGIN
  SET @RunningTotal = @RunningTotal + @PayAmount
  IF @RunningTotal >= @DrACAvailable BREAK
  UPDATE LoanAutoPayTransactions SET  PayAmount=@RunningTotal WHERE StartDate=(SELECT MIN(T2.StartDate) FROM LoanAutoPayTransactions T2 WHERE T2.LRAC=LRAC)


  FETCH NEXT FROM rt_cursor INTO @PayAmount, @DrACAvailable

 END

CLOSE rt_cursor
DEALLOCATE rt_cursor

最佳答案

虽然我不完全确定您想要什么,但我试了一下。输出是一个表变量,但它可以很容易地更改为更新查询或其他内容。请试一试,看看是否能得到您想要的结果:

DECLARE @DrACAvailable decimal,
        @PayAmount decimal,
        @RunningTotal decimal,
        @CustomerID int,        
        @CurrentCustomerID int

SET @RunningTotal = 0

DECLARE @OutputTable table(
    LRAC int,
    PayAmount decimal,
    DrACAvailable decimal);

DECLARE PaymentCursor CURSOR
FOR
SELECT LRAC, PayAmount, DrACAvailable
FROM LoanAutoPayTransactions ORDER BY LRAC, StartDate

OPEN PaymentCursor

FETCH NEXT FROM PaymentCursor INTO @CustomerID, @PayAmount, @DrACAvailable

WHILE @@FETCH_STATUS = 0
 BEGIN
  IF @CurrentCustomerID != @CustomerID SET @RunningTotal = 0
  SET @CurrentCustomerID = @CustomerID
  PRINT 'Processing customer id: ' + CAST(@customerid AS VARCHAR)
  SET @RunningTotal = @RunningTotal + @PayAmount  

  IF @RunningTotal <= @DrACAvailable INSERT @OutputTable (LRAC, PayAmount, DrACAvailable) VALUES (@CustomerID, @PayAmount, @DrACAvailable)

  FETCH NEXT FROM PaymentCursor INTO @CustomerID , @PayAmount, @DrACAvailable

 END

CLOSE PaymentCursor
DEALLOCATE PaymentCursor

-- Print the output table
SELECT LRAC AS 'Customer ID', PayAmount AS 'Instalment amount', DrACAvailable AS 'Available' FROM @OutputTable

关于sql-server - sql - 显示我可以支付的所有分期付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17650039/

相关文章:

c# - C#从数据库读取数据时出错

java - JTDS - java.sql.SQLException : I/O Error: Connection reset by peer: socket write error

sql-server - 将 xml 命名空间限制为仅限主根

sql - 如何找出重复的记录

sql-server-2008 - 用于超大型数据库的 SQL Azure

sql-server - 临时表的主键已经存在

sql - 创建文件遇到操作系统错误 5(无法检索此错误的文本。原因 : 15105)

php - 使用 PHP 的 odbc 抓取一个 varchar(max) 列

sql-server - 审计触发器中的当前事务 ID

sql-server-2008 - 基于两个表 T-SQL 选择不同的行