2013-09-30 59 views
0

我試圖創建一個視圖來獲取各種表中幾個不同行的總和。 (我不知道怎麼解釋這個正確)使用多個表中的總和創建視圖(Oracle SQL)

這裏是我的表是如何設置的:

訪問者:

VISITORID FNAME   LNAME   PHONE    HOTELID 
---------- --------------- --------------- --------------- ---------- 
     23 Bella   Morgan   0394110625    3 

預訂:

BOOKINGID HOTELID  ROOMNO BOOKINGDATE   BOOKINGDAYS BEDANDBREA VISITORID 
---------- ---------- ---------- ------------------- ----------- ---------- ---------- 
     28   3  509 28-04-2013 00:00:00   3 Yes    23 

客房:

ROOMNO HOTELID ROOMTYPE     PRICE 
---------- ---------- ------------------------- ---------- 
     509   3 Double     700 

Se rvices:

SERVICEID SERVICENAME          COST   HOTELID 
---------- -------------------------------------------------- ---------- ---------- 
1-CLTH  Cloth Cleaning          14.95    1 
2-RMSV  Room Service          9.95    2 

Booking_services:

SERVICEID BOOKINGID 
---------- ---------- 
2-RMSV    32 
1-CLTH    32 

我想創建一個名爲票據觀點,讓我總房費和所有服務的成本。

要得到房間價格,總和是rooms.price * bookings.bookingdays。 對於服務,它是services表中與booking_services中的SERVICEID匹配的所有行的總和,用於匹配的預訂標識號。

當前所有表格中的行數比我所顯示的多(所以它不佔用太多空間),並且我有一個查詢但它只顯示2個訪問者就像總數一樣。我知道這是因爲第5行,但我不確定我如何計算以及那些在booking_services中沒有排名的人。

下面是查詢:

CREATE VIEW bills AS 
SELECT v.fname, SUM((r.price*b.bookingdays)+s.cost) AS total 
FROM visitors v, rooms r, bookings b, services s, booking_services bs 
WHERE v.visitorid = b.visitorid 
AND 
s.serviceid in(select bs.serviceid from booking_services where bs.bookingid = b.bookingid) 
AND 
b.roomno = r.roomno 
GROUP BY v.fname; 

任何幫助得到我之後,我(如果這讓任何意義),將不勝感激。

回答

0

Here is the SQLFiddel Demo

你可以試試下面的查詢您的觀點:

Select v.fname, sum((r.price*b.bookingdays)+nvl(bso.cost,0)) 
    From visitors v 
    Join bookings b 
    on v.visitorid = b.visitorid 
    Join rooms r 
    on b.roomno = r.roomno 
    left outer join (select bs.BOOKINGID,sum(cost) as cost 
        from booking_services bs 
        Join services s 
         on s.SERVICEID = bs.SERVICEID 
        group by bs.BOOKINGID) bso 
    on bso.BOOKINGID = b.BOOKINGID 

GROUP BY v.fname; 
+0

優秀。這工作完美。非常感謝你。 –