sql - Oracle generate range between 2 columns of data -


good day all,

i have table structured below

f_number    act_date    amount  range_start     range_end ------------------------------------------------------------- t18564      20140702        10  700102180211    700102195210 t18564      20140702        10  700104371331    700104376330 t18564      20140702        20  700250037215    700250077214 t18564      20140702        30  600311039928    600311044927 

how generate numbers in between ranges data displayed as,

f_number    act_date    amount  item_id -------------------------------------------- t18564      20140702        10  700102180211                                     ... t18564      20140702        10  700102195210 t18564      20140702        10  700104371331                                 ... t18564      20140702        10  700104376330 

and forth. tried using,

select f_number, act_date, amount, to_number(range_start - 1) + level item_id   table connect level <= (to_number(range_end) - to_number(range_start)) + 1  

but works ok first range goes wrong after.

*to_number used because ranges stored varchar2

thanks assistance.

i think in order use connect by effectively, need identify each row uniquely. don't see kind of primary key or unique identifier in data above (and storing numbers , dates in varchar2 columns? bad idea). might try this:

with t1 (     select 't18564' f_number, '20140702' act_date          , 10 amount, '700102180211' range_start          , '700102195210' range_end       dual      union     select 't18564', '20140702', 10, '700104371331', '700104376330'       dual      union     select 't18564', '20140702', 20, '700250037215', '700250077214'       dual      union     select 't18564', '20140702', 30, '600311039928', '600311044927'       dual ) select f_number, act_date, amount, range_start - 1 + level   (     select f_number, act_date, amount          , to_number(range_start) range_start          , to_number(range_end) range_end          , row_number() on ( order null ) rn       t1 ) connect range_start - 1 + level <= range_end       , prior rn = rn       , prior dbms_random.value not null; 

note i'm using row_number() generate unique row identifier. use sys_guid() if inclined (the order should not matter in case).

i ran above in oracle 10g , returned correct number of rows (in case, 65000 -- sum of range_end - range_start + 1).


Comments

Popular posts from this blog

How to run C# code using mono without Xamarin in Android? -

html - grunt SVG to webfont -

c# - SharpSsh Command Execution -