SQL%随时间增加

时间:2018-08-23 14:51:03

标签: sql sql-server

我希望有人能提供帮助。我正在使用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个月更新一次,这就是为什么在所有年份中应用%增长的原因。

我知道这很复杂,只是希望有人可以告诉我如何实现这一目标。谢谢杰西

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望每个订阅期的每月金额增加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;

这应该可以处理您的数据。我不确定自动更新逻辑如何发挥作用。