0
CREATE TABLE Flight 
(
    FlightID INTEGER NOT NULL,
    FlightDate TIMESTAMP NOT NULL, 
    Origin VARCHAR(30) NOT NULL,
    Destination VARCHAR(30) NOT NULL,
    MaxCapacity INTEGER NOT NULL,
    PricePerSeat DECIMAL NOT NULL

)
CREATE TABLE FlightBooking 
(
    BookingID INTEGER NOT NULL,
    CustomerID INTEGER NOT NULL,
    FlightID INTEGER NOT NULL, 
    NumSeats INTEGER NOT NULL,
    Status CHAR(1) NOT NULL,
    BookingTime TIMESTAMP NOT NULL,
    TotalCost DECIMAL

)
status = Reserve, Held Cancelled or Expired (only reserved and held are taken into account)
CREATE TABLE SeatBooking
(
    BookingID INTEGER NOT NULL,
    PassengerID INTEGER NOT NULL,
    SeatNumber CHAR(4) 

)

とにかく、flightid が指定されていて、利用可能な座席の総数、予約済みの座席の総数、保持されている座席の総数があれば、座席のステータスを取得できますか

4

2 に答える 2

0

とにかく、flightid が指定されていて、利用可能な座席の総数、予約済みの座席の総数、保持されている座席の総数があれば、座席のステータスを取得できますか

はいあります!Oracle、SQL Server、または DB2 の使用を想定しており、CTE を使用しています。それらのいずれかがない場合は、サブクエリまたは一時テーブルを使用する必要があります。

「R」がステータスのコードである場合の予約済み座席の合計 (where 句で必要に応じて、これを 1 つのフライトに制限することもできますが、これらのクエリではすべてのフライト ID の値が得られます):

SELECT SUM(NumSeats), FlightID
FROM FlightBooking 
WHERE Status = 'R'
GROUP BY FlightID

'H' がステータスのコードの場合の保有シートの合計:

SELECT SUM(NumSeats), FlightID
FROM FlightBooking 
WHERE Status = 'H'
GROUP BY FlightID

利用可能な座席の合計は次のとおりです。

  WITH used AS
   (
      SELECT SUM(NumSeats) as used, FlightID
      FROM FlightBooking 
      WHERE Status in ('R','H')
      GROUP BY FlightID
   )
   SELECT F.MaxCapacity-U.Used, F.FlightID
   FROM used U
   JOIN Flight F ON U.FlightID = F.FlightID
于 2013-04-10T16:41:00.733 に答える