2013-04-10 113 views
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,並給出和總可用座位,總保留席位,總席位SQL,連接兩個或多個表,並返回結果

總數
+0

狀態是char(1),但你列出一些單詞。我們如何回答這個問題,你是不是告訴我們魔法代碼字母的狀態? – Hogan 2013-04-10 16:30:07

+0

你正在使用什麼SQL平臺--SQL Server,Oracle,DB2,MySQL,SQLite或其他? – Hogan 2013-04-10 16:31:05

+0

@ user2266419 - 如果答案有幫助,請註冊並選擇複選標記作爲正確的答案 - 不要編輯您的答案,謝謝。這意味着沒有人能看到這個問題。 – Hogan 2013-04-10 18:03:10

回答

0

有反正我能得到座椅的狀態,如果FLIGHTID是 給出和總數的總可用座位,總 保留席位,總席位

是的,有!我假設使用Oracle,SQL Server或DB2並使用CTE。如果您沒有其中一個必須使用子查詢或臨時表。

總保留席位,如果「R」是狀態代碼(你可以限制這一個航班,如果你在where子句中想,但這些查詢給你所有的廣告投放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 
+0

但問題是,當我運行其不顯示狀態是過期或取消時的值,對不起,我不是很清楚我的問題也許你可以請告訴我,當狀態也是如何返回表E或C(當它的E或C不影響最大容量時) – user2266419 2013-04-11 01:47:38

+0

@ user2266419 - 是的,有一個問題 - 你忽略了我的評論,並沒有閱讀我的答案。它**很清楚如何使用我的答案**中的其他代碼。另外,回答我在評論中提出的兩個問題。 – Hogan 2013-04-11 03:00:00

+0

我正在使用PgAdmin – user2266419 2013-04-11 11:49:25

0

鑑於飛行ID,你應該能夠得到總的可用座位,總保留席位和總擁有席位,像這樣:

select MaxCapacity - Reserved - Held as Available, Reserved, Held 
from 
(select f.MaxCapacity, 
     sum(case b.status when 'R' then b.NumSeats end) Reserved, 
     sum(case b.status when 'H' then b.NumSeats end) Held 
from Flight f 
left join FlightBooking b on f.FlightID = b.FlightID 
where f.FlightID = ?) sq 
相關問題