2015-01-29 3 views
0

Что я хочу сделать (для каждого рейса), это выбрать Flight_number,Departure_airport. Вылет имеет значение MIN Leg_number, при прибытии - MAX Leg_number.SQL различное условие multi select

Я пробовал это. Но присоединитесь к частям или что еще не хватает, вот ссылка: http://sqlfiddle.com/#!2/263a2/5

+0

Вы используете один и тот же столбец «Leg_number» от Flight_leg присоединиться, чтобы на макс и мин номерами ноги из ЛУ, что не будет работать? – SoulTrain

+0

Мне нужно найти Departure_airport_code (MIN номер ноги) и Arrival_airport_code (MAX номер ноги) и после этого присоединиться к таблице AIRPORT. – user2254399

+0

Для этого вам сначала понадобятся коды воздушного порта для (минимальных и максимальных номеров ног) для конкретного номера рейса, а затем получить информацию о Аэропорту на основе этих кодов. Верный? – SoulTrain

ответ

1

Кажется странным .. но это может быть то, что вы после ... Мы получаем минимальную/максимальную ножку для каждого полета в подзапросе псевдонима «Z» Мы используем это, чтобы присоединиться обратно в два раза flight_leg , один раз для вылета и один раз для прибытий и снова дважды возвращайтесь в аэропорт один раз для вылета один раз для прибытия.

SELECT Z.Flight_Number, DA.Name DeptName, AA.Name ArrivName 
    FROM (SELECT MIN(Leg_Number) MLN, MAX(Leg_Number) MxLN, Flight_Number 
       FROM Flight_Leg Group by Flight_Number) Z 
    INNER JOIN Flight_Leg D 
    on D.Flight_Number = Z.Flight_Number 
    and D.Leg_Number = Z.MLN 
    INNER JOIN Flight_Leg A 
    on A.Flight_Number = Z.Flight_Number 
    and A.Leg_Number = Z.MxLN 
    INNER JOIN AirPort DA 
    on DA.AirPort_Code = D.Departure_AirPort_Code 
    INNER JOIN AirPort AA 
    on AA.AirPort_Code = A.Arrival_AirPort_Code 

http://sqlfiddle.com/#!2/263a2/56

+0

Это то, что мне нужно :) Спасибо. – user2254399

0

Не совсем уверен, что это то, что вам нужно. Это написано в MS SQL, поэтому синтаксису потребуются некоторые мелкие хитрости.

SELECT fl.Flight_number, 
ao.Name, 
ai.Name, 
(select min(Leg_number) from FLIGHT_LEG fa where fl.Flight_number 
    = fa.Flight_number) as min_leg_number, 

(select max(Leg_number) from FLIGHT_LEG fb where fl.Flight_number 
    = fb.Flight_number) as max_leg_number 
FROM Flight_leg Fl 
inner join AIRPORT as ao on fl.Departure_airport_code = 
    ao.Airport_code 
inner join AIRPORT as ai on fl.Arrival_airport_code = 
    ai.Airport_code 
+0

, это то же самое, но мне нужно 2 ряд для 2 рейсов здесь ссылка: http: //sqlfiddle.com/ #! 2/99429/1 – user2254399

+0

Это проблема синтаксиса? – user2254399

+0

Существует только 1 ряд для номер_лета 1, потому что код аэропорта CCC недействителен, поэтому внутреннее соединение отбрасывает его. Перейдите в левое соединение. – FrugalShaun