如何使用数学优化触发器?

How do I optimize my trigger using math?

我的触发器有问题,看起来像这样:

CREATE TRIGGER [Balance_monthly]
ON [dbo].[Balance]
FOR INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON

    UPDATE Months
    SET Months.Balance_monthly = 
        CASE 
            WHEN Balance.In_Months > 1 THEN Amount_Monthly          
        END
    FROM Balance
    JOIN Months 
    ON Months.Id <= Balance.In_Months;

    UPDATE Months
    SET Months.Balance_monthly = 
    CASE 
        WHEN Balance.In_Months >= 13 THEN Amount_Monthly * 2        
    END
    FROM Balance
    JOIN Months 
    ON Months.Id <= Balance.In_Months - 12;

    UPDATE Months
    SET Months.Balance_monthly = 
    CASE 
        WHEN Balance.In_Months >= 25 THEN Amount_Monthly * 3        
    END
    FROM Balance
    JOIN Months 
    ON Months.Id <= Balance.In_Months - 24;

END

这是存储我的触发器的 table,只有 1 行并且它将保持这种状态,所以不要考虑那个。

这是我根据 In_Months 的数量将值放入的 table。

如您所见,在 In_Months 超过 37 之前,它一直运行良好。我的问题是,是否有任何聪明的头脑可以帮助我计算它,无论有多少In_Months有。

认为这个表达式应该计算你想要的:

UPDATE Months
SET Months.Balance_monthly = 
    ((Balance.In_Months + 12 - Months.Id) / 12) * Amount_Monthly          
FROM Balance
CROSS JOIN Months;

假设,如果 In_Months 为 1,我们应该 设置一月份的值。