with combined_data (id,val) as (
select 1, '101' from dual union all
select 2, 'SAM' from dual union all
select 3, 'INDIA' from dual union all
select 4, '102' from dual union all
select 5, 'ROCK' from dual union all
select 6, 'USA' from dual union all
select 7, '103' from dual union all
select 8, 'MICHAEL' from dual union all
select 9, 'RUSSIA' from dual
), n as (
select id, val, row_number() over (order by id) - 1 as rn
from combined_data
), rc as (
select id, val, mod(rn, 3) as c, (rn - mod(rn, 3))/ 3 as r
from n
)
select t1.val, t2.val, t3.val
from rc t1 join rc t2 using (r) join rc t3 using (r)
where t1.c = 0 and t2.c = 1 and t3.c = 2
更新:解决方案基于 pivot 条款:
with combined_data (id,val) as (
select 1, '101' from dual union all
select 2, 'SAM' from dual union all
select 3, 'INDIA' from dual union all
select 4, '102' from dual union all
select 5, 'ROCK' from dual union all
select 6, 'USA' from dual union all
select 7, '103' from dual union all
select 8, 'MICHAEL' from dual union all
select 9, 'RUSSIA' from dual
), n as (
select id, val, row_number() over (order by id) - 1 as rn
from combined_data
), rc as (
select val, mod(rn, 3) as c, (rn - mod(rn, 3))/ 3 as r
from n
)
select num, name, state from rc
pivot (min(val) for c in (0 num, 1 name, 2 state))
order by r
(注意 rc cte在这里不能有id列。否则它将是隐含的 group by 执行人 pivot 条款。) 见db小提琴。
1条答案
按热度按时间ufj5ltwl1#
只需给行编号,预先计算每一行和每一列的索引,然后将它们放在一起。
更新:解决方案基于
pivot
条款:(注意
rc
cte在这里不能有id列。否则它将是隐含的group by
执行人pivot
条款。)见db小提琴。