#sql #database #oracle-apex
#sql #База данных #oracle-вершина
Вопрос:
Мне нужно сделать приложение Apex Oracle. Это описание приложения: туристическое направление определяется его названием и описанием. Каждое туристическое направление имеет определенное количество бронирований, определяемых датой начала, датой окончания, описанием, ценой, как в следующем примере: Туристическое направление: отель Sunrise, Гавайи Start date: 18-Aug-2014
End date: 01-Sep-2014
Description: One room with breakfast
included Price: 2000
Для приложения я сделал 2 таблицы: Destinations(ID: number, Name:varchar2, Description: varchar2)
и Bookings(BID: number, ID: number, start_date: date, end_date: date, description: varchar2, price:number)
Одно из требований состоит в отчете, который показывает все заказы полностью между заданной начальной и конечной датой и их общую стоимость. У меня есть запрос, но он не показывает общую цену, а только информацию о бронированиях между этими датами. Это запрос:
SELECT b.bid, b.start_date, b.end_date, SUM(b.price) as total_price
FROM Bookings b
WHERE b.START_DATE>=:START_DATE AND b.END_DATE<=:END_DATE
GROUP BY b.bid, b.start_date, b.end_date;
Может ли кто-нибудь заметить ошибку?
Комментарии:
1. не могли бы вы попробовать использовать sum(nvl(b.price,0) для определения нулевых значений, присутствующих в вашей таблице?
2. Если
bid
это первичный ключ таблицы, то вы идете в неправильном направлении. Покажите некоторые примеры данных и ожидаемый результат.
Ответ №1:
Это просто потому, что вы используете start_date и end_date внутри вашего предложения группировки. Это использование приводит к тому, что данные также группируются по start_date и end_date! Вы должны сделать что-то вроде этого:
WITH Result AS(
SELECT b.bid, SUM(b.price) as total_price
FROM Bookings b
WHERE b.START_DATE>=:START_DATE AND b.END_DATE<=:END_DATE
GROUP BY b.bid
)
SELECT *,:start_date as start, :end_date as end
FROM Result
Комментарии:
1. Я попробовал этот код, и у него есть странная ошибка в пустой строке. В нем говорится: «строка 8: ключевое слово FROM не найдено там, где ожидалось», где строка 8 — это строка после конечного параграфа.
2. Это может быть связано с тем, что некоторые зарезервированные слова, которые я использовал в своем запросе, просто переименуйте слова ‘start’, ‘end’ и ‘Result’ своими словами, и ошибка исчезнет