t1 (ordered descending):
a | comment |
---|---|
512 | (ordered desc) |
415 | |
310 | |
205 | |
195 | |
150 | |
132 | |
90 | |
74 | |
20 | |
1 |
t2 (ordered ascending):
b | comment |
---|---|
10 | (ordered asc) |
11 | |
12 | |
13 |
I would like to create t3:
a (desc) | b | comment |
---|---|---|
512 | 10 | (b=asc) |
415 | 11 | |
310 | 12 | |
205 | 13 | |
195 | 13 | (b=desc) |
150 | 12 | |
132 | 11 | |
90 | 10 | |
74 | 10 | (b=asc) |
20 | 11 | |
1 | 12 |
etc.
In table t3, a is data from t1, and b is data from t2.
Advertisement
Answer
You can add a sequence number and then join using arithmetic:
x
select t1.*, t2.*
from (select t1.*,
row_number() over (order by a desc) as seqnum
from t1
) t1 left join
(select t2.*,
row_number() over (order by which,
case when which = 'a' then b end asc,
b desc
) as seqnum,
count(*) over () as cnt
from t2 cross join
(select 'a' as which from dual union all
select 'd' as which from dual
) x
) t2
on mod(t1.seqnum - 1, t2.cnt) = t2.seqnum - 1
order by t1.seqnum;