#sql #oracle
#sql #Oracle
Вопрос:
Ниже приведен мой запрос, по какой-то причине он продолжает выполняться и ничего не возвращает. Я хотел выполнить внутреннее объединение обеих таблиц и добавить условие booking_value=1, которое находится в таблице, к которой я присоединяюсь. Я хочу, чтобы отображались все записи с той же датой аренды, что и во второй таблице, но где booking _value = 1.
select a.timestamp , SUM(DEMAND_TO_COME * BOARD_RATE) AS
RevenueTotal,
count(DEMAND_TO_COME * BOARD_RATE) as NumofTrans from(
select PA_FCS.ob_location_id,
PA_FCS.ib_location_id,
PA_FCS.vehicle_class,
PA_FCS.return_date,
PA_FCS.RENTAL_DATE,board_rate,
PA_FCS.Demand_to_come,
substr(PA_FCS.rental_date, 0,8) as timestamp
from PA_FCS
inner join pa_reservation on pa_reservation.Rental_date =
PA_FCS.rental_date where booking_value=1
) a
group by a.timestamp
order by a.timestamp;
Это должно сработать и дать мне три столбца следующего
Timestamp RevenueTotal NumofTrans
20190220 51435.56745 123665
Не уверен, что я здесь делаю не так.
Ответ №1:
Вы могли бы упростить свой запрос следующим образом (вам не нужен подзапрос и некоторые поля в его проекции):
SELECT
substr(pa_fcs.rental_date, 0, 8) AS timestamp,
SUM(pa_fcs.demand_to_come * board_rate) AS revenuetotal,
COUNT(*) AS numoftrans
FROM
pa_fcs
INNER JOIN pa_reservation ON pa_reservation.rental_date = pa_fcs.rental_date
WHERE
booking_value = 1
GROUP BY
substr(pa_fcs.rental_date, 0, 8)
ORDER BY
timestamp;
Я не уверен, чего вы пытаетесь достичь с помощью count(DEMAND_TO_COME * BOARD_RATE)
. Если вам нужно количество записей, count(*)
следует это сделать.