sql >> Database teknologi >  >> RDS >> Oracle

FROM søgeord blev ikke fundet, hvor det forventes

Den kode, du har sendt, har ikke en from klausul, men du sagde, at du bare ikke havde inkluderet det. Den har dog en where klausul - som er det forkerte sted. Det er også at sammenligne en dato med en streng, hvilket ikke er en god idé, da den er afhængig af implicit konvertering og session NLS-indstillinger. (Måske tror du, at den kan sammenligne den faste streng med den dato, du lige har konverteret til en streng - men det er ikke tilfældet, i det mindste på samme niveau af forespørgsel, og det ville alligevel være ineffektivt i dette tilfælde.) Og som du bruger aggregeret funktion, skal du bruge en gruppe-by-klausul...

Det ser ud til, at du ønsker:

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

eller hvis du ønsker gårsdagens dato uden at skulle angive det, kan du bruge:

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

Det vil kun matche rækker med Booking_Date er præcis ved midnat. Hvis det faktisk inkluderer andre tidspunkter, kan du gøre:

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

som vil inkludere en enkelt hel dags data.




  1. Sådan opretter du forbindelse til Oracle in go

  2. Ret problem med SQL-databasegendannelse afventer adgang nægtet

  3. Sådan sletter du alle rækker fra en tabel undtagen de nyeste 10 rækker

  4. java.sql.Forbindelsesudvidelse til SSH