您发布的代码没有from
条款,但你说你只是没有包括它。然而,它确实有一个where
条款 - 这是在错误的地方。它还将日期与字符串进行比较,这不是一个好主意,因为它依赖于隐式转换和会话 NLS 设置。 (也许您认为它可以将固定字符串与刚刚转换为字符串的日期进行比较 - 但事实并非如此,至少在同一级别的查询中,并且在这种情况下无论如何都是低效的。)正在使用聚合函数,您需要一个 group-by 子句...
看起来你想要:
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
或者如果您想要昨天的日期而不必指定它,您可以使用:
WHERE Booking_Date = TRUNC(sysdate - 1)
GROUP BY REPLACE(CM_NAME, '/', ' '),
Booking_Date
这只会匹配其中的行Booking_Date
正好是午夜。如果它实际上包括其他时间那么你可以这样做:
WHERE Booking_Date >= TRUNC(sysdate - 1)
AND Booking_Date < TRUNC(sysdate)
GROUP BY REPLACE(CM_NAME, '/', ' '),
TO_CHAR(Booking_Date,'MM/DD/YYYY')
其中将包括一整天的数据。