我需要一些帮助来将此查询重新设计为动态 While 循环。
这个 table A
包含运行循环的迭代次数以及传递给查询变量的值。
acct_type_int|quarter_year_int|days_pass_end_period_int
1 | 20172 |1529
2 | 20171 |1619
3 | 20181 |1169
下面的查询接受来自 table A
的变量 @var_acct_type_int、@var_quarter_year_int 和 @var_days_pass_end_period_int。由于它只有 3 行,它将运行 3 次迭代。
因此,例如,在这种情况下,第一次迭代将获取表 A 的第 1 行中的值 acct_type_int = 1 和 quad_year_int = 20172、days_pass_end_period_int=1529 并将它们分配给变量 @var_acct_type_int、@var_quarter_year_int 和 @ var_days_pass_end_period_int 如查询中所示。
创建的结果数据集如下所示,并INSERTED 插入到 table_c
中。然后迭代将运行 2 次,因为有 3 行 in table A
这是到目前为止的查询:
INSERT INTO table_c
(
acct_type_int,
quarter_year_int,
update_day_pass_end_period_int
)
SELECT 1 /*@var_acct_type_int*/ as acct_type_int, z.quarter_year_int, z.update_day_pass_end_period_int FROM(
SELECT
a.quarter_year_int,
case when 1529 /*@var_days_pass_end_period_int*/ + (90*ROW_NUMBER() OVER (ORDER BY quarter_year_int desc)) > 1799 then 1800 else 1529 /*@days_pass_end_period_int*/ + (90*ROW_NUMBER() OVER (ORDER BY quarter_year_int desc)) end AS update_day_pass_end_period_int FROM
(
SELECT
DISTINCT
quarter_year_int
from B where quarter_year_int < 20172 /*var_quarter_year_int*/ and acct_type_int = 1 /*@var_acct_type_int*/
) a
union all
SELECT
a.quarter_year_int,
case when 1529 /*@var_days_pass_end_period_int*/ - (90 *ROW_NUMBER() OVER (ORDER BY quarter_year_int )) < 90
then 179 else 1529 /*@var_days_pass_end_period_int*/ - (90 *ROW_NUMBER() OVER (ORDER BY quarter_year_int ))
end AS update_day_pass_end_period_int
FROM
(
SELECT
DISTINCT
quarter_year_int
from B where quarter_year_int > 20172 /*@var_quarter_year_int*/ and acct_type_int = 1 /*var_acct_type_int*/
) a
) z
--order by z.quarter_year_int