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.