Oracle
 sql >> Database >  >> RDS >> Oracle

DA parola chiave non trovata dove previsto

Il codice che hai pubblicato non ha un from clausola, ma hai detto che non l'avevi inclusa. Tuttavia, ha un where clausola - che è nel posto sbagliato. Sta anche confrontando una data con una stringa, il che non è una buona idea in quanto si basa sulla conversione implicita e sulle impostazioni NLS della sessione. (Forse pensi che possa confrontare la stringa fissa con la data che hai appena convertito in una stringa, ma non è così, almeno nello stesso livello di query, e sarebbe comunque inefficiente in questo caso.) E come tu stai usando la funzione di aggregazione, hai bisogno di una clausola di raggruppamento...

Sembrerebbe che tu voglia:

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

oppure se vuoi la data di ieri senza doverla specificare puoi usare:

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

Ciò corrisponderà solo alle righe in cui è Booking_Date è esattamente mezzanotte. Se effettivamente include altre volte, puoi fare:

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

che includerà un solo giorno intero di dati.