I am attempting to query the hotel database to find the total cost of a booking. I am using a sub-select query however I am constantly receiving an error.
This is the query, I want it to display the booking id and room number along with total cost.
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;
This is the error:
ERROR at line 3:
ORA-00907: missing right parenthesis
Well you have a few issues.
First, you have two FROM
s in the query one before the subquery and one after the subquery.
Second, you have no GROUP BY
but you have an aggregate function being used.
It seem like you might want:
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;
Edit, if you want a TOTAL
row, then you can use 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);
If you want the data in a column, then you can use a Common Table Expression on the subquery:
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
)
Although I'm not sure where in your schema the various attributes are, try this:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.