Вы можете использовать row_number()
и выполнить условное агрегирование:
select code,
max(case when seq = 1 then compcode end) as one,
max(case when seq = 2 then compcode end) as two,
. . .
max(case when seq = 7 then compcode end) as seven
from (select t.*,
row_number() over (partition by code order by compcode) as seq
from table t
) t
group by code;
То же самое можно достичь с помощью динамического PIVOT
SQL, если code
имеет слишком много compcode
с.