Oracle数据库航空预订表生成全行程Itinerary计算列SQL实现问询
Oracle 实现SQL
以下语句适用于Oracle 11gR2及以上版本,直接替换你的表名为实际表名即可执行:
SELECT Recordlocator, Sequencenmbr, Sequenceair, DepartureDateTime, DepartAirport, ArrAirport, -- 按规则拼接完整行程 LISTAGG(DepartAirport, '-') WITHIN GROUP (ORDER BY Sequenceair) OVER (PARTITION BY Recordlocator, Sequencenmbr) || '-' || -- 取当前预订版本最后一段航段的到达机场 FIRST_VALUE(ArrAirport) OVER ( PARTITION BY Recordlocator, Sequencenmbr ORDER BY Sequenceair DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS Itinerary FROM 你的表名;
逻辑说明
- 用
LISTAGG开窗函数,按Recordlocator、Sequencenmbr分组,组内按Sequenceair升序拼接所有航段的出发机场,用短横线连接 - 用
FIRST_VALUE开窗函数,同分组内按Sequenceair倒序排序,取第一个值即为该预订版本最后一段航段的到达机场,拼到出发机场拼接串末尾 - 开窗函数会为分组内每一行都返回相同的拼接结果,符合每行都展示完整行程的需求
内容的提问来源于stack exchange,提问作者Viet Anh Nguyen
相关产品推荐
相关产品推荐

