create table rollup_test (fielda number, fieldb varchar2(3), fieldc varchar2(10), fieldd varchar2(10));
insert into rollup_test values (100, 'ABC' , 'Andy', 'Brown');
insert into rollup_test values (100, 'ABC' , 'Susie', 'White');
insert into rollup_test values (100, 'ABC' , 'Bobby' , 'Green');
insert into rollup_test values (200, 'XYZ' , 'Billy', 'Black');
insert into rollup_test values (200, 'XYZ' , 'Duffy', 'Duck');
insert into rollup_test values (200, 'ZZZ', 'Duffy', 'Duck');
insert into rollup_test values (300, 'JLK' , 'Bugs', 'Bunny');
select (case when substr(comp_key,1,3) = substr(prev_key,1,3) then null else substr(comp_key,1,3) end) as fielda,
(case when substr(comp_key,4,3) = substr(prev_key,4,3) then null else substr(comp_key,4,3) end ) as fieldb,
fieldc,
fieldd
from
(
select fielda||fieldb as comp_key, lag(fielda||fieldb) over (order by fielda||fieldb, fieldc, fieldd) as prev_key, fieldc, fieldd from rollup_test
order by fielda||fieldb)
FIELDA FIELDB FIELDC FIELDD
------ ------ ---------- ----------
100 ABC Andy Brown
Bobby Green
Susie White
200 XYZ Billy Black
Duffy Duck
ZZZ Duffy Duck
300 JLK Bugs Bunny