0

我有一个包含值的表

bill_amt days month
250        28  Feb
300        31  mar
500        30  apr.

我的债务总额是700。

现在的问题是我需要添加 bill_amts 来获得我的总债务金额。

例如:对于 apr-> 我的账单金额为 500,天数为 30。我的总债务是 700。我还需要 200 来清偿债务。所以我会从行军中取出 200 个。

但是三月有 300 天,天数为 31。所以我需要单独从中取 200 天,并且只需要计算适当的日期。例如:(200/300 *31)- 这将给我 200 的游行天数。

现在我需要将 apr 的总天数和新发现的 3 月的天数相加,得到我的总天数。

如何为此编写代码?

4

2 回答 2

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 等,并按 desc 顺序对其进行排序。对于年度数据,您应该存储诸如 201202、201203、201204 等值。

于 2012-09-19T07:28:48.067 回答
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
于 2012-09-19T07:29:41.940 回答