0

さまざまなテーブルのいくつかの異なる行の合計を取得するビューを作成しようとしています。(これを正しく説明する方法がわかりません)

これが私のテーブルの設定方法です:

訪問者:

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

サービス:

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

予約サービス:

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

請求書と呼ばれるビューを作成して、宿泊費の合計とすべてのサービスの費用を確認したいと考えています。

客室料金を取得するには、合計は rooms.price*bookings.bookingdays です。サービスの場合、一致する bookingID の 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;

私が求めているものを手に入れるための助けがあれば(これが意味をなす場合)、感謝します。

4

1 に答える 1