使用函数找到以下解决方案以获得否。支付债务金额的天数。
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 等,并按 desc 顺序对其进行排序。对于年度数据,您应该存储诸如 201202、201203、201204 等值。