Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Das Schlüsselwort FROM wurde nicht an der erwarteten Stelle gefunden

Der von Ihnen gepostete Code hat keinen from Klausel, aber Sie sagten, Sie hätten sie einfach nicht aufgenommen. Es hat jedoch ein where Klausel - die an der falschen Stelle steht. Es vergleicht auch ein Datum mit einer Zeichenfolge, was keine gute Idee ist, da es auf implizite Konvertierungs- und Sitzungs-NLS-Einstellungen angewiesen ist. (Vielleicht denken Sie, dass es die feste Zeichenfolge mit dem Datum vergleichen kann, das Sie gerade in eine Zeichenfolge konvertiert haben - aber das ist nicht der Fall, zumindest auf derselben Abfrageebene, und wäre in diesem Fall sowieso ineffizient.) Und wie Sie Wenn Sie eine Aggregatfunktion verwenden, benötigen Sie eine Group-By-Klausel ...

Anscheinend möchten Sie:

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

oder wenn Sie das gestrige Datum wollen, ohne es angeben zu müssen, können Sie verwenden:

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

Das stimmt nur mit Zeilen überein, in denen das Booking_Date ist ist genau um Mitternacht. Wenn es tatsächlich andere Zeiten enthält, können Sie Folgendes tun:

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

die Daten für einen einzigen ganzen Tag umfassen.