SQL : 设置操作对每条记录执行逻辑
SQL : Set operation to perform logic for each record
Table 1 - 升级,Table2 - 数据
需求是:对于数据table中的所有记录,我们需要进行升级。
示例 1 - 数据 table 中的记录 1,年份是 2014,经济年份是 2018。因此,我们需要将值 (600) 从 2014 升级到 2015,然后到 2016,然后到 2017 .
因此,最终值为 600*5*6*7
示例 2 - 数据 table 中的记录 3 将升级两次 - 从 2015 年到 2016 年,然后到 2017 年。因此,最终值为 1000*6*7
必须对数据 table.
中的所有记录执行此操作
我不想使用游标,因为我有 300 万条记录可以执行此操作。
请提出一些使用集合操作执行的想法
create table data
([year] int,
value int,
economic_year int,
modelid int,
shopid int)
create table escalation
([year] int,
shopid int,
value_es int
)
insert into data
values(
2014,600,2018,5,1),
(2014,600,2018,5,1),
(2015,1000,2018,5,1),
(2016,2000,2018,5,1),
(2017,3000,2018,5,1)
insert into escalation
values
(2014,1,4),
(2015,1,5),
(2016,1,6),
(2017,1,7)
select * from escalation
select * from data
您可以这样做的一种方法是使用第三个 table 预先填充所有可能的 "update paths" 和相应的值。例如,如果您的年份是 2014 年,经济年是 2018 年,那么您的乘数 (value_es) 就是 120 (4*5*6)。像这样:
您将在 data.year = start_year 和 data.economic_year = econ_year 两列上将数据 table 连接到这个新的 table。然后,您的新值将是 data.value * val.
您可以创建一个简单的 ETL 过程,最初填充这个新的 table 并在日历滚动到新的一年时更新它。如果您有任何问题,请告诉我您的想法。
Table 1 - 升级,Table2 - 数据
需求是:对于数据table中的所有记录,我们需要进行升级。
示例 1 - 数据 table 中的记录 1,年份是 2014,经济年份是 2018。因此,我们需要将值 (600) 从 2014 升级到 2015,然后到 2016,然后到 2017 . 因此,最终值为 600*5*6*7
示例 2 - 数据 table 中的记录 3 将升级两次 - 从 2015 年到 2016 年,然后到 2017 年。因此,最终值为 1000*6*7 必须对数据 table.
中的所有记录执行此操作我不想使用游标,因为我有 300 万条记录可以执行此操作。
请提出一些使用集合操作执行的想法
create table data
([year] int,
value int,
economic_year int,
modelid int,
shopid int)
create table escalation
([year] int,
shopid int,
value_es int
)
insert into data
values(
2014,600,2018,5,1),
(2014,600,2018,5,1),
(2015,1000,2018,5,1),
(2016,2000,2018,5,1),
(2017,3000,2018,5,1)
insert into escalation
values
(2014,1,4),
(2015,1,5),
(2016,1,6),
(2017,1,7)
select * from escalation
select * from data
您可以这样做的一种方法是使用第三个 table 预先填充所有可能的 "update paths" 和相应的值。例如,如果您的年份是 2014 年,经济年是 2018 年,那么您的乘数 (value_es) 就是 120 (4*5*6)。像这样:
您将在 data.year = start_year 和 data.economic_year = econ_year 两列上将数据 table 连接到这个新的 table。然后,您的新值将是 data.value * val.
您可以创建一个简单的 ETL 过程,最初填充这个新的 table 并在日历滚动到新的一年时更新它。如果您有任何问题,请告诉我您的想法。