Найдите значения на основе одной таблицы столбцов из другой таблицы. - PullRequest
0 голосов
/ 21 июня 2020

Требуется помощь.

У меня есть три таблицы

  1. Building_master - столбцы: BuildingCode, Building Name

  2. Floor_master - столбцы: FloorCode, Floor Name, BuildingCode

  3. Room_Master - столбцы: RoomCode, RoomName, RoomFloor, RoomBulding

I хотите заполнить GridView, когда я выбираю Building Name из Building_master таблицы, где вывод будет примерно таким, как показано ниже

Building Name: A

Floor               
1   Room 101    Room 102    Room 103    Room 104
2   Room 201    Room 202    Room 203
3   Room 301    Room 302    Room 303    Room 304

Пожалуйста, помогите создать SQL запрос для желаемого вывода

1 Ответ

1 голос
/ 21 июня 2020

Для поворота по фиксированному количеству столбцов (то есть к максимальному количеству комнат на этаже) вы можете присоединиться, а затем использовать оконные функции и условное агрегирование:

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.

...