Проблема с таблицей внутреннего соединения в столбце

#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(*) следует это сделать.