如何使用sql查询解决这个问题?

时间:2012-09-19 06:32:51

标签: sql

我有一个包含值

的表格
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月份新发现的天数相加,以获得我的总天数。

如何为此编写代码?

2 个答案:

答案 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