как получить первое значение внутреннего соединения отличное от другой таблицы - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть ниже изображение и запрос.проблема в том, что мой запрос показывает мне неправильное значение, в нескольких записях в не отображается правильное название отеля, означает, что я хочу первый отель от VoucherHotelTable, но он показывает мне второй отель из-за отличия, я думаю, пожалуйста, помогите мне, как справиться с

Select distinct v.VoucherId,u.Name,v.ArrivalFromCity,
       CAST(v.ArrivalDate  AS DATE) as ADDate, v.ArrivalFlightNo, hm.HotelName
from  VoucherMaster v
inner join UserMaster u on  v.AgentId = u.UserId
inner join VoucharHotel vh on v.VoucherId = vh.VoucharId
inner join HotelMaster hm on vh.HotelId = hm.HotelId
inner join AirportTerminal t on  v.ArrivalTerminalId = t.AirprtTerminalId 
where v.ArrivalDate  between '11/15/2018 12:00:00 AM'
    and '11/16/2018 12:00:00 AM'  AND v.ArrivalSectorId = 3

Check Picture

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018
;with VoucherHotelRnk as (
    select voucherId, hotelId, date, ROW_NUMBER() over(partition by voucherId order by date) rowcount
    from VoucharHotel
)
Select v.VoucherId,u.Name,v.ArrivalFromCity,
       CAST(v.ArrivalDate  AS DATE) as ADDate, v.ArrivalFlightNo, hm.HotelName
from  VoucherMaster v
inner join UserMaster u on  v.AgentId = u.UserId
inner join VoucherHotelRnk vh on v.VoucherId = vh.VoucherId and vh.rowcount= 1
inner join HotelMaster hm on vh.HotelId = hm.HotelId
inner join AirportTerminal t on  v.ArrivalTerminalId = t.AirprtTerminalId 
where v.ArrivalDate  between '11/15/2018 12:00:00 AM'
    and '11/16/2018 12:00:00 AM'  AND v.ArrivalSectorId = 3
0 голосов
/ 15 ноября 2018

Этот запрос работает через раздел.Попробуй это.Функция rank () должна возвращать рейтинг отеля за каждый ваучер.

;with VoucherHotelRnk as (
    select voucherId, hotelId, date, rank() over(partition by voucherId order by date) rnk
    from VoucharHotel
)
Select v.VoucherId,u.Name,v.ArrivalFromCity,
       CAST(v.ArrivalDate  AS DATE) as ADDate, v.ArrivalFlightNo, hm.HotelName
from  VoucherMaster v
inner join UserMaster u on  v.AgentId = u.UserId
inner join VoucherHotelRnk vh on v.VoucherId = vh.VoucherId and vh.rnk = 1
inner join HotelMaster hm on vh.HotelId = hm.HotelId
inner join AirportTerminal t on  v.ArrivalTerminalId = t.AirprtTerminalId 
where v.ArrivalDate  between '11/15/2018 12:00:00 AM'
    and '11/16/2018 12:00:00 AM'  AND v.ArrivalSectorId = 3
...