基于另一个表中的一列表查找值pivot

js81xvg6  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(378)

需要帮助。
我有三张table Building_master -列:buildingcode,building name Floor_master -列:floorcode、floor name、buildingcode Room_Master -列:roomcode、roomname、roomfloor、RoomBuilding
我想在选择时填充gridview Building NameBuilding_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查询

ldioqlga

ldioqlga1#

若要以固定数量的列(即每层的最大房间数)为轴心,可以联接,然后使用窗口函数和条件聚合:

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 .

相关问题