如何简化以下内部加入SQL查询
我从不同的表中获取记录,并串联这样的值,以便我可以显示Flight1,Flief2,Flight3和Flight4 ......作为列。 由于我使用相同的条件,是否有任何方法可以简化此查询?
SELECT b.BookingID
,(SELECT TOP 1 CONCAT(il.CCode,il.FlightNumber,';',dc.[Name])
FROM ILeg il
INNER JOIN PLeg pjl ON pjl.InventoryLegID = il.InventoryLegID
INNER JOIN PSegment pjs ON pjs.SegmentID = pjl.SegmentID
INNER JOIN BPassenger bp ON bp.PassengerID = pjs.PassengerID
INNER JOIN City dc ON dc.CityCode = il.DepartureStation
INNER JOIN City ac ON ac.CityCode = il.ArrivalStation
WHERE bp.BookingID = b.BookingID AND il.CarrierCode = '12T'
ORDER BY il.STD
) AS Flight1
,(SELECT CONCAT((il.CCode,il.FlightNumber,';',dc.[Name]))
FROM ILeg il
INNER JOIN PLeg pjl ON pjl.InventoryLegID = il.InventoryLegID
INNER JOIN PSegment pjs ON pjs.SegmentID = pjl.SegmentID
INNER JOIN BPassenger bp ON bp.PassengerID = pjs.PassengerID
INNER JOIN City dc ON dc.CityCode = il.DepartureStation
INNER JOIN City ac ON ac.CityCode = il.ArrivalStation
WHERE bp.BookingID = b.BookingID AND il.CarrierCode = '12T'
ORDER BY il.STD
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY) AS Flight2
,(SELECT CONCAT((il.CCode,il.FlightNumber,';',dc.[Name]))
FROM ILeg il
INNER JOIN PLeg pjl ON pjl.InventoryLegID = il.InventoryLegID
INNER JOIN PSegment pjs ON pjs.SegmentID = pjl.SegmentID
INNER JOIN BPassenger bp ON bp.PassengerID = pjs.PassengerID
INNER JOIN City dc ON dc.CityCode = il.DepartureStation
INNER JOIN City ac ON ac.CityCode = il.ArrivalStation
WHERE bp.BookingID = b.BookingID AND il.CarrierCode = '12T'
ORDER BY il.STD
OFFSET 2 ROWS
FETCH NEXT 1 ROWS ONLY) AS Flight3
FROM Booking b
WHERE b.RecordLocator='1234'
谢谢
I am getting records from different tables and concatenating the values like this so that I can display Flight1, Flight2, Flight3, and Flight4...... as columns.
Since I am using the same conditions, Is there any way to simplify this query?
SELECT b.BookingID
,(SELECT TOP 1 CONCAT(il.CCode,il.FlightNumber,';',dc.[Name])
FROM ILeg il
INNER JOIN PLeg pjl ON pjl.InventoryLegID = il.InventoryLegID
INNER JOIN PSegment pjs ON pjs.SegmentID = pjl.SegmentID
INNER JOIN BPassenger bp ON bp.PassengerID = pjs.PassengerID
INNER JOIN City dc ON dc.CityCode = il.DepartureStation
INNER JOIN City ac ON ac.CityCode = il.ArrivalStation
WHERE bp.BookingID = b.BookingID AND il.CarrierCode = '12T'
ORDER BY il.STD
) AS Flight1
,(SELECT CONCAT((il.CCode,il.FlightNumber,';',dc.[Name]))
FROM ILeg il
INNER JOIN PLeg pjl ON pjl.InventoryLegID = il.InventoryLegID
INNER JOIN PSegment pjs ON pjs.SegmentID = pjl.SegmentID
INNER JOIN BPassenger bp ON bp.PassengerID = pjs.PassengerID
INNER JOIN City dc ON dc.CityCode = il.DepartureStation
INNER JOIN City ac ON ac.CityCode = il.ArrivalStation
WHERE bp.BookingID = b.BookingID AND il.CarrierCode = '12T'
ORDER BY il.STD
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY) AS Flight2
,(SELECT CONCAT((il.CCode,il.FlightNumber,';',dc.[Name]))
FROM ILeg il
INNER JOIN PLeg pjl ON pjl.InventoryLegID = il.InventoryLegID
INNER JOIN PSegment pjs ON pjs.SegmentID = pjl.SegmentID
INNER JOIN BPassenger bp ON bp.PassengerID = pjs.PassengerID
INNER JOIN City dc ON dc.CityCode = il.DepartureStation
INNER JOIN City ac ON ac.CityCode = il.ArrivalStation
WHERE bp.BookingID = b.BookingID AND il.CarrierCode = '12T'
ORDER BY il.STD
OFFSET 2 ROWS
FETCH NEXT 1 ROWS ONLY) AS Flight3
FROM Booking b
WHERE b.RecordLocator='1234'
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在顶部使用CTE,主查询可能会如下。
You can use a CTE on top and the main query might look as below.