填充编号的行,直到使用另一列达到特定值

时间:2017-07-26 15:30:19

标签: sql database oracle

我的桌子上有很多帐号和贷款期限/条款(贷款期限是几个月)

我需要做的是为每个小于或等于贷款期限的帐号填写一个带编号的行。我附上了一个屏幕截图:

Example

因此,对于此特定示例,此帐号需要48行编号,因为该术语仅为48个月。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

with
     test_data ( account_nmbr, term ) as (
       select 'ABC200', 6 from dual union all
       select 'DEF100', 8 from dual
     )
-- End of simulated inputs (for testing purposes only, not part of the solution).
-- SQL query begins BELOW THIS LINE.
select     level as row_nmbr, term, account_nmbr
from       test_data
connect by level <= term
       and prior account_nmbr = account_nmbr
       and prior sys_guid() is not null
order by   account_nmbr, row_nmbr   --   If needed
;

  ROW_NMBR        TERM  ACCOUNT_NMBR
  --------  ----------  ------------
         1           6  ABC200
         2           6  ABC200
         3           6  ABC200
         4           6  ABC200
         5           6  ABC200
         6           6  ABC200
         1           8  DEF100
         2           8  DEF100
         3           8  DEF100
         4           8  DEF100
         5           8  DEF100
         6           8  DEF100
         7           8  DEF100
         8           8  DEF100

在Oracle 12中,您可以使用LATERAL子句:

with
     test_data ( account_nmbr, term ) as (
       select 'ABC200', 6 from dual union all
       select 'DEF100', 8 from dual
     )
-- End of simulated inputs (for testing purposes only, not part of the solution).
-- SQL query begins BELOW THIS LINE.
select   l.row_nmbr, t.term, t.account_nmbr
from     test_data t,
         lateral (select level as row_nmbr from dual connect by level <= term) l
order by account_nmbr, row_nmbr   --  If needed
;