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

У меня есть запрос ниже Я хочу показать данные fromCityId И ToCityId.Предположим, пассажиры путешествуют fromCity Лондон toCity Манчестер.Как мне написать запрос, подобный этому, когда я использую предложение where и in, оно показывает те же значения в fromcity и tocity Ожидаемые результаты приведены ниже Рисунок

      Select vh.VoucharId,fCity.CityName as FromCity, tCity.CityName as ToCity, InDate 
from VoucharHotel vh  
inner join City fCity on   vh.CityId = fCity.CityId  inner join City tCity on
 vh.CityId = tCity.CityId 
 where vh.InDate  between '11/15/2018 12:00:00 AM' and '11/16/2018 12:00:00 AM'   AND vh.CityId in (1,2)

enter image description here

enter image description here

  CREATE TABLE VoucharHotel (
        ID int IDENTITY(1,1) PRIMARY KEY,
        VoucharId Int ,
        CityId int,
        HotelId  int,
        InDate Datetime,
        OutDate Datetime
    );

    CREATE TABLE City (
        CityId int IDENTITY(1,1) PRIMARY KEY,
        CityName varchar(200),
    );
    insert into City Values('London')
    insert into City Values('Manchester')
    insert into City Values('Birmingham')
    insert into City Values('Leeds')

    CREATE TABLE HotelMaster (
        HotelId int IDENTITY(1,1) PRIMARY KEY,
        HotelName varchar(200),
    );
    insert into HotelMaster Values('London Hotel')
    insert into HotelMaster Values('Manchester Hotel')
    insert into HotelMaster Values('Birmingham Hotel')
    insert into HotelMaster Values('Leeds Hotel')

    Insert into VoucharHotel Values(22,1,1,'11/15/2018', '11/16/2018')
    Insert into VoucharHotel Values(22,2,2,'11/16/2018', '11/18/2018')
    Insert into VoucharHotel Values(22,1,1,'11/18/2018', '11/20/2018')

    Insert into VoucharHotel Values(23,2,2,'11/16/2018', '11/17/2018')
    Insert into VoucharHotel Values(23,4,4,'11/17/2018', '11/20/2018')
    Insert into VoucharHotel Values(23,2,2,'11/20/2018', '11/26/2018')

1 Ответ

0 голосов
/ 21 ноября 2018

Ваш стартовый стол должен быть объединением на столе VoucharHotel, например:

Select V1.VoucharId, V1.CityId, V2.HotelId  ,V1.InDate
from  VoucharHotel  V1
join VoucharHotel V2 on V1.VoucharId  = V2.VoucharId  and convert(date,V1.OutDate) = dateadd(day,-1,convert(date,V2.InDate ) )

Отсюда просто добавьте объединения в City Table и отфильтруйте по дате, которую вы хотите

...