我希望有人能提供帮助。我正在使用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个月更新一次,这就是为什么在所有年份中应用%增长的原因。
我知道这很复杂,只是希望有人可以告诉我如何实现这一目标。谢谢杰西
答案 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;
这应该可以处理您的数据。我不确定自动更新逻辑如何发挥作用。