首页 > 解决方案 > SQL % 随时间增加

问题描述

我希望有人能帮帮忙。我正在使用 SQL Server 2016,并且我的数据如下所示;

OrderID    Value        SubscriptionLengthInMonths  SubscriptionStart   SubscriptionEnd   Renew
2344        1920                       24                   14/05/2018   14/05/2020          1
2555        5376                       12                   01/03/2018   01/03/2019          1

我需要的是按年细分的按月添加的每月付款价值。我们通过将 SubscriptionValue 除以 SubscriptionLengthInMonths 来计算月值。

棘手的是有时我的数据上有一个标志(自动更新),这意味着如果值为 1,订阅将在 SubscriptionEnd 上自动更新,与原始订阅相同的月份。发生这种情况时,每月费用会增加 2%。我需要显示每个订阅的月费的列,按年份细分。上述示例的理想输出如下所示

OrderID SubscriptionValue   SubscriptionLengthInMonths  2018    2019    2020    2021
2344       1920                         24               80      80     81.6    81.6
2555       5376                         12               448    456.96  466.06  475.36

OrderID 2344 付款在 2018 年和 2019 年都是 80 的原因是因为这是一个 2 年(24 个月)订阅,直到 2020 年才会自动续订。这会在 2020 年再次续订(这反映在下面,因为百分比已经为 2020 年和 2021 年添加)

OrderID 2555 每 12 个月更新一次,这就是为什么在所有年份都应用百分比增加的原因。

我知道这很复杂,只是希望有人能告诉我如何实现这一点。谢谢,杰斯

标签: sqlsql-server

解决方案


如果我理解正确,您希望每个订阅期的每月金额增加 2.0。

算术逻辑是这样的:

select t.*,
       (power(1.02,
              datediff(month, subscriptionStart, '2018-12-31') / SubscriptionLengthInMonths
             ) * (SubscriptionValue / SubscriptionLengthInMonths)
       ) monthly_2018,
       (power(1.02,
              datediff(month, subscriptionStart, '2019-12-31') / SubscriptionLengthInMonths
             ) * (SubscriptionValue / SubscriptionLengthInMonths)
       ) monthly_2019,
       . . .
from t;

这应该适用于您的数据。我不确定自动更新逻辑是如何发挥作用的。


推荐阅读