Для поворота по фиксированному количеству столбцов (то есть к максимальному количеству комнат на этаже) вы можете присоединиться, а затем использовать оконные функции и условное агрегирование:
select
building_name,
floor_name,
max(case when rn = 1 then room_name end) room1,
max(case when rn = 2 then room_name end) room2,
max(case when rn = 3 then room_name end) room3
from (
select
b.building_code,
b.building_name,
f.floor_code,
f.floor_name,
r.room_name,
row_number() over(
partition by b.building_code, f.floor_code order by r.room_code
) rn
from building_master b
inner join floor_master f
on f.building_code = b.building_code
inner join room_master r
on r.room_floor = f.floor_code
and r.room_building = b.building_code
) t
group by b.building_code, b.building_name, f.floor_code, f.floor_name
Мне пришлось сделать несколько предположений о взаимосвязях в вашей схеме, которые вам, возможно, придется пересмотреть.
Вы можете обрабатывать больше комнат по этажам, добавляя больше max()
выражений к внешнему select
.