sql >> Base de Datos >  >> RDS >> Oracle

DESDE palabra clave no se encuentra donde se esperaba

El código que publicaste no tiene un from cláusula, pero usted dijo que simplemente no la había incluido. Sin embargo, tiene un where cláusula - que está en el lugar equivocado. También compara una fecha con una cadena, lo que no es una buena idea, ya que se basa en la conversión implícita y la configuración de NLS de la sesión. (Tal vez piense que puede comparar la cadena fija con la fecha que acaba de convertir en una cadena, pero ese no es el caso, al menos en el mismo nivel de consulta, y sería ineficiente de todos modos en este caso). Y como usted está utilizando la función agregada, necesita una cláusula group-by...

Parece que quieres:

SELECT REPLACE(CM_NAME, '/', ' ') as CM_NAME,  
   TO_CHAR(Booking_Date,'MM/DD/YYYY') AS Booking_Date,
   sum(Air_Revenue) as TTL_AIRFARE,
   sum(Room_Revenue) as TTL_ROOM,
   sum(Car_Revenue) AS TTL_CAR,
   sum(Activity_Revenue) as TTL_ACTIVITY,
   0 as TTL_CRUISE
FROM your_table
WHERE Booking_Date = DATE '2018-03-20'
GROUP BY REPLACE(CM_NAME, '/', ' '),
   Booking_Date

o si quieres la fecha de ayer sin tener que especificarla puedes usar:

WHERE Booking_Date = TRUNC(sysdate - 1)
GROUP BY REPLACE(CM_NAME, '/', ' '),
   Booking_Date

Eso solo coincidirá con las filas donde Booking_Date es exactamente a la medianoche. Si realmente incluye otras horas, entonces puede hacer:

WHERE Booking_Date >= TRUNC(sysdate - 1)
AND Booking_Date < TRUNC(sysdate)
GROUP BY REPLACE(CM_NAME, '/', ' '),
   TO_CHAR(Booking_Date,'MM/DD/YYYY')

que incluirá un solo día completo de datos.