T-SQL 中的动态循环

时间:2021-08-01 21:50:14

标签: sql sql-server tsql stored-procedures common-table-expression

我需要一些帮助来将此查询重新设计为动态 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

enter image description here

这是到目前为止的查询:

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 

0 个答案:

没有答案