17,377
社区成员
发帖
与我相关
我的任务
分享
with temp as(
select 22 a,11 b from dual
union all
select 22 a,31 b from dual
union all
select 22 a,21 b from dual
union all
select 34 a,22 b from dual
union all
select 23 a,32 b from dual
union all
select 23 a,23 b from dual
union all
select 23 a,12 b from dual
union all
select 34 a,13 b from dual
)
select case when b is null then null else a end a,b from(
select a,b,max(a) c from(
select a, b from temp
union all
select a,null b from temp group by a
) group by a,b
) order by c,a
select t.* , row_number() over(partition by a order by b) from tb t
--------这样可以不
SQL> with tab as
2 (
3 select 22 a, 11 b from dual union all
4 select 22 a, 31 b from dual union all
5 select 22 a, 21 b from dual union all
6 select 34 a, 22 b from dual union all
7 select 23 a, 32 b from dual union all
8 select 23 a, 23 b from dual union all
9 select 23 a, 12 b from dual union all
10 select 34 a, 13 b from dual
11 )
12 select decode(b, null, '-----------', a) a,
13 decode(b, null, '-----------', b),
14 decode(b, null, '-----------', rn) rn
15 from (select a, b, row_number() over(partition by a order by b) rn
16 from tab
17 group by rollup(a, b))
18 ;
A DECODE(B,NULL,'-----------',B) RN
---------------------------------------- ---------------------------------------- ----------------------------------------
22 11 1
22 21 2
22 31 3
----------- ----------- -----------
23 12 1
23 23 2
23 32 3
----------- ----------- -----------
34 13 1
34 22 2
----------- ----------- -----------
----------- ----------- -----------
12 rows selected
SQL>