0

ホテルのデータベースにクエリを実行して、予約の合計費用を見つけようとしています。副選択クエリを使用していますが、常にエラーが発生します。

これはクエリです。予約IDと部屋番号を合計費用とともに表示したいと思います。

    SELECT BOOKING_ID, ROOM_NO , SUM(TOTAL) AS TOTAL FROM
    (
        SELECT (END_DATE-START_DATE) DAYDIFF, ((END_DATE-START_DATE)*ROOM_PRICE) TOTAL_ROOM 
        FROM ROOM_TBL NATURAL JOIN ROOM_DETAILS_TBL WHERE BOOKING_ID = &BOOKING_ID
    )  FROM ROOM_TBL; 

これはエラーです:

ERROR at line 3:
ORA-00907: missing right parenthesis
4

2 に答える 2

0

さて、あなたはいくつかの問題を抱えています。

まず、FROMクエリには2つのがあります。1つはサブクエリの前、もう1つはサブクエリの後にあります。

次に、GROUP BY使用されている集計関数があります。

あなたが望むかもしれないようです:

SELECT BOOKING_ID, ROOM_NO , SUM(TOTAL) AS TOTAL 
FROM
(
    SELECT BOOKING_ID, 
        ROOM_NO, 
        (END_DATE-START_DATE) DAYDIFF, 
        ((END_DATE-START_DATE)*ROOM_PRICE) TOTAL 
    FROM ROOM_TBL 
    NATURAL JOIN ROOM_DETAILS_TBL 
    WHERE BOOKING_ID = &BOOKING_ID
)  
GROUP BY BOOKING_ID, ROOM_NO;

編集します。TOTAL行が必要な場合は、次を使用できますGROUP BY ROLLUP

SELECT max(BOOKING_ID) Booking_id, 
  case when ROOM_NO is null then ' ' else room_no end Room_no, 
  SUM(TOTAL) AS TOTAL 
FROM
(
    SELECT BOOKING_ID, 
        ROOM_NO, 
        (END_DATE-START_DATE) DAYDIFF, 
        ((END_DATE-START_DATE)*ROOM_PRICE) TOTAL 
    FROM ROOM_TBL 
    NATURAL JOIN ROOM_DETAILS_TBL 
    WHERE BOOKING_ID = &BOOKING_ID
)  
GROUP BY ROLLUP (room_no);

SQL FiddlewithDemoを参照してください

列にデータが必要な場合は、サブクエリで共通テーブル式を使用できます。

with cte as
(
     SELECT BOOKING_ID, 
        ROOM_NO, 
        (END_DATE-START_DATE) DAYDIFF, 
        ((END_DATE-START_DATE)*ROOM_PRICE) TOTAL 
    FROM ROOM_TBL 
    NATURAL JOIN ROOM_DETAILS_TBL 
 )
 select booking_id,
    room_no,
    total,
    case when rn = 1 then totalbooking else null end totalbooking     
 from
 (
     select booking_id,
        room_no,
        total,
        (select sum(total) from cte) TotalBooking,
        row_number() over(partition by booking_id order by room_no) rn
     from cte
 ) 

SQL FiddlewithDemoを参照してください

于 2013-03-20T17:57:54.710 に答える
0

スキーマのどこにさまざまな属性があるかはわかりませんが、次のことを試してください。

SELECT z.BOOKING_ID, r.ROOM_NO , SUM(TOTAL) TOTAL 
FROM  (SELECT ri.room_No, dt.Booking_id,
             (END_DATE-START_DATE) DAYDIFF, 
             ((END_DATE-START_DATE)*ROOM_PRICE) TOTAL 
       FROM ROOM_TBL ri
             NATURAL JOIN ROOM_DETAILS_TBL dt
       WHERE BOOKING_ID = &BOOKING_ID) z 
   Join ROOM_TBL r  
     On r.ROOM_NO = z.Room_No   
于 2013-03-20T18:01:15.833 に答える