我有一个包含值
的表格bill_amt days month
250 28 Feb
300 31 mar
500 30 apr.
我的总债务金额是700。
现在问题是我需要添加bill_amts以获得我的总债务金额。
例: 对于apr->我的账单是500,而我的账单是30,我的总债务是700.我还需要200多笔清偿债务。所以我将从游行中拿走200个。
但是3月有300天和31天。所以我需要单独拿200,并且只需要计算适当的日期。例如:(200/300 * 31) - 这将给我,没有为200的行军日。
现在我需要将apr中的总天数和3月份新发现的天数相加,以获得我的总天数。
如何为此编写代码?
答案 0 :(得分:0)
使用函数找到以下解决方案以获取否。用于偿还债务金额的天数。
CREATE FUNCTION GetNoOfDays
(
@debt_amt DECIMAL(14, 2)
)
RETURNS INT
AS
BEGIN
DECLARE @days INT = 0
DECLARE @amt DECIMAL(14, 2)
DECLARE @day INT
DECLARE c1 CURSOR FOR
SELECT [Days], [Amount] FROM Account ORDER BY [Month] DESC
OPEN c1
FETCH NEXT FROM c1
INTO @day, @amt
WHILE @@FETCH_STATUS = 0
BEGIN
IF @debt_amt > @amt
BEGIN
SET @days = @days + @day
SET @debt_amt = @debt_amt - @amt
END
ELSE
BEGIN
SET @days = @days + ROUND(@debt_amt / @amt * @day, 0)
SET @debt_amt = 0
BREAK
END
FETCH NEXT FROM c1
INTO @day, @amt
END
CLOSE c1
DEALLOCATE c1
RETURN @days
END
GO
SELECT dbo.GetNoOfDays(700)
注意:请根据您的环境更换表名。我假设Month列存储数字月份值,如2,3,4等,并按顺序排序。对于年度数据,您应该存储201202,201203,201204等值。
答案 1 :(得分:0)
试试这个:
DECLARE @Debt AS DECIMAL
DECLARE @Days AS DECIMAL
DECLARE @Amount AS DECIMAL
DECLARE @TotalDays AS DECIMAL
SET @TotalDays = 0
SET @Debt = 700
DECLARE MyCursor CURSOR FOR
SELECT [Days], Amount FROM Test
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @Days, @Amount
WHILE (@@Fetch_Status = 0 AND @Debt > 0)
BEGIN
IF(@Debt > @Amount)
SET @TotalDays = @TotalDays + @Days
ELSE
SET @TotalDays = @TotalDays + (@Days * @Debt/@Amount)
SET @Debt = @Debt - @Amount
FETCH NEXT FROM MyCursor INTO @Days, @Amount
END
CLOSE MyCursor
DEALLOCATE MyCursor
SELECT @TotalDays