0

値を持つテーブルがあります

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

私の借金総額は700です。

ここでの問題は、bill_amts を追加して総負債額を取得する必要があることです。

例: 4 月の場合 -> 請求額が 500 で、日数が 30 です。負債の合計は 700 です。負債を解消するには、さらに 200 が必要です。だから私は行進から200を取ります。

しかし、3 月には 300 日が 31 日あります。したがって、そこから 200 だけを取り出して、適切な日付のみを計算する必要があります。例: (200/300 *31)- これにより、金額 200 の行進の日数が得られます。

ここで、4 月の合計日数と 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 などの月の数値を格納すると想定し、降順で並べ替えました。年ごとのデータの場合、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 に答える