Oracle
 sql >> Base de données >  >> RDS >> Oracle

Le mot clé FROM n'a pas été trouvé là où il était attendu

Le code que vous avez posté n'a pas de from clause, mais vous avez dit que vous ne l'aviez tout simplement pas inclus. Il a cependant un where clause - qui est au mauvais endroit. Il compare également une date à une chaîne, ce qui n'est pas une bonne idée car il repose sur la conversion implicite et les paramètres NLS de session. (Peut-être pensez-vous qu'il peut comparer la chaîne fixe avec la date que vous venez de convertir en chaîne - mais ce n'est pas le cas, du moins au même niveau de requête, et serait de toute façon inefficace dans ce cas.) Et comme vous utilisez la fonction d'agrégation, vous avez besoin d'une clause group-by...

Il semblerait que vous vouliez :

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

ou si vous voulez la date d'hier sans avoir à la préciser vous pouvez utiliser :

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

Cela ne correspondra qu'aux lignes où le Booking_Date est exactement à minuit. Si cela inclut en fait d'autres heures, vous pouvez faire :

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

qui comprendra une seule journée complète de données.