0

フライトに関するデータ セットがあり、同じフライトに乗った乗客のペアが同じ列に座っていることを知りたいと思っています。すべてのフライトで行のみが一意であると仮定すると、行 1 がフライト番号 10 で占有されている場合、フライト 11 には表示されません。

すなわち。以下のサンプルデータを見てください。

ただし、同じ列に座って同じフライトを利用した 3 人がいる場合は、それらを無視したいので、3 人ではなくペアとしてのみカウントします。

サンプルデータは次のとおりです。

Passenger   Flight_Number   Row
1             10            1
2             10            1
3             10            3
4             11            5
1             11            5
2             11            6
3             11            7
1             12            2
2             12            2
3             12            2

コードは次のとおりです。

CREATE TABLE flight
(
    Passenger INT NOT NULL,
    Flight_Number INT NOT NULL,
    Row_Number INT NOT NULL
);

INSERT INTO flight 
VALUES(1, 10, 1),(2, 10, 1),(3, 10, 3),
      (4, 11, 5),(1, 11, 5),(2, 11, 6),
      (3, 11, 7),(1, 12, 2),(2, 12, 2),
      (3, 12, 2);  

私が欲しいのは:

Flight_Number   Row Passenger_A Passenger_B
10               1         1             2
11               5         4             1

Special notes in here, because Flight number 12 has 3 passengers sitting in the same row, thus we ignore it.

So far, my thoughts are:

SELECT Passenger, Flight_Number, Row_Count 
FROM flight RIGHT OUTER JOIN
(SELECT Row, COUNT(*) AS Row_Count FROM flight GROUP BY Row) AS Count
WHERE Row_Count = 2  AND... 

Any helps on how I may continue this? ie. How to get Passenger_A and Passenger_B and etc?

Thank you for your time in advance.

4

1 に答える 1

1

これを試してください:

SELECT DISTINCT
  a.Flight_Number,a.Row_Number,
  f1.Passenger as Passenger_A,
  f2.Passenger as Passenger_B
FROM (
  select Flight_Number,Row_Number from flight 
  group by Flight_Number,Row_Number having count(*)=2
  ) a
join flight f1 
  on (f1.Flight_Number=a.Flight_Number and f1.Row_Number=a.Row_Number)
join flight f2 
  on (f2.Flight_Number=a.Flight_Number and f2.Row_Number=a.Row_Number)
where f1.Passenger>f2.Passenger

最後の条件は、重複したペアを排除し、乗客を自分自身と結合します。

于 2013-11-06T13:16:30.280 に答える