SQL-запрос о сумме значений между 2 датами

#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’ своими словами, и ошибка исчезнет