自动增加查询

时间:2019-08-19 12:39:31

标签: db2

我需要创建一个查询,该查询将当前行的值增加到上一行的8%。

表(将其命名为money)包含一行(两列),看起来像

AMOUNT  ID
100.00  AAA

我只需要以这种方式填充该表中的数据(从该表中选择一个,例如6次迭代):

100.00 AAA
108.00 AAA
116.64 AAA
125.97 AAA
136.04 AAA
146.93 AAA

1 个答案:

答案 0 :(得分:3)

您可以使用通用表表达式来做到这一点。

例如如果您的来源看起来像这样:

db2 "create table money(amount decimal(31,2), id varchar(10))" 
db2 "insert into money values (100,'AAA')"

您可以使用以下查询来创建输入数据(为清楚起见,我将包括计数器列):

db2 "with 
        cte(c1,c2,counter) 
     as 
        (select 
            amount, id, 1 
         from 
            money
         union all
         select 
            c1*1.08, c2, counter+1 
         from 
            cte 
         where counter < 10)
      select * from cte"

C1                                C2         COUNTER    
--------------------------------- ---------- -----------
                           100.00 AAA                  1
                           108.00 AAA                  2
                           116.64 AAA                  3
                           125.97 AAA                  4
                           136.04 AAA                  5
                           146.92 AAA                  6
                           158.67 AAA                  7
                           171.36 AAA                  8
                           185.06 AAA                  9
                           199.86 AAA                 10

要填充现有表而不重复现有行,请使用例如像这样的插入物:

$ db2 "insert into money 
     with 
        cte(c1,c2,counter) 
     as 
        (select 
            amount*1.08, id, 1 
         from 
            money
         union all
         select 
            c1*1.08, c2, counter+1 
         from 
            cte 
         where counter < 10) select c1,c2 from cte"

$ db2 "select * from money"

AMOUNT                            ID        
--------------------------------- ----------
                           100.00 AAA       
                           108.00 AAA       
                           116.64 AAA       
                           125.97 AAA       
                           136.04 AAA       
                           146.93 AAA       
                           158.68 AAA       
                           171.38 AAA       
                           185.09 AAA       
                           199.90 AAA       
                           215.89 AAA       

  11 record(s) selected.