Wysłany kod nie zawiera from
klauzula, ale powiedziałeś, że po prostu jej nie uwzględniłeś. Ma jednak where
klauzula - która jest w złym miejscu. Jest to również porównywanie daty z ciągiem, co nie jest dobrym pomysłem, ponieważ opiera się na niejawnej konwersji i ustawieniach NLS sesji. (Być może myślisz, że może porównać ustalony ciąg z datą, którą właśnie przekonwertowałeś na ciąg — ale tak nie jest, przynajmniej na tym samym poziomie zapytania, a i tak byłoby to nieefektywne w tym przypadku). używasz funkcji agregującej, potrzebujesz klauzuli grupowania...
Wygląda na to, że chcesz:
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
lub jeśli chcesz wczorajszą datę bez konieczności jej określania, możesz użyć:
WHERE Booking_Date = TRUNC(sysdate - 1)
GROUP BY REPLACE(CM_NAME, '/', ' '),
Booking_Date
Dopasuje to tylko wiersze, w których Booking_Date
jest dokładnie o północy. Jeśli faktycznie obejmuje inne czasy, możesz zrobić:
WHERE Booking_Date >= TRUNC(sysdate - 1)
AND Booking_Date < TRUNC(sysdate)
GROUP BY REPLACE(CM_NAME, '/', ' '),
TO_CHAR(Booking_Date,'MM/DD/YYYY')
który będzie obejmował jeden pełny dzień danych.