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
Post a Comment