2015-06-16 60 views
0

我在Oracle SQL中發現缺少關鍵字錯誤,我不知道爲什麼。這是我的代碼。我想要根據變量P1_DATE_CHOOSER將列拆分不同的時間。 (如果有幫助,我正在使用Apex App Developer)。在CASE WHEN語句中獲取缺少的關鍵字錯誤

Select START_DATE, 
Round(Avg(Run_TIME), 3) as "Average_RunTime", 
Round(Max(Run_TIME), 3) as "Max_RunTime", Round(Median(Run_time), 3) as "Median_RunTime" 
from 
    (Select job_id, 
     Case P1_DATE_CHOOSER 
      WHEN 'Daily' THEN TRUNC(start_time) as 'START_DATE' 
      WHEN 'Weekly' THEN to_char(start_time, 'WW') as 'START_DATE' 
      WHEN 'Monthly' THEN to_char(start_time, 'MONTH') as 'START_DATE' 
     END, 
     1440*(END_TIME - START_TIME)) as "RUN_TIME" 
    from NI_INFA_ACTIVITY_LOG_V 
    order by job_id asc, start_time asc) 
group by START_DATE order by START_DATE 

任何幫助,將不勝感激。

+0

第一次看...在'CASE ... END'語句的'END'字之後移動'AS START_DATE'。 –

+1

首先,如果'P1_DATE_CHOOSER'是一個APEX頁面變量,它應該以冒號爲前綴。其次,別名'start_date'應該出現在'case'語句之後,而不是每個'then'子句的一部分。如果你想要的話,你可以用雙引號標識符(儘管我不會除非你想創建一個區分大小寫的標識符)。正如您在這裏所做的那樣,單引號標識符會將其轉換爲字符串文字,這也會創建語法錯誤。 –

回答

1
Select START_DATE, 
     Round(Avg(Run_TIME), 3) as 'Average_RunTime', 
     Round(Max(Run_TIME), 3) as 'Max_RunTime', 
     Round(Median(Run_time), 3) as 'Median_RunTime' 
from 
    (Select job_id, 
      (Case :P1_DATE_CHOOSER 
       WHEN 'Daily' THEN TRUNC(start_time) 
       WHEN 'Weekly' THEN to_char(start_time, 'DAY') 
       WHEN 'Monthly' THEN to_char(start_time, 'MONTH') 
      END) AS 'START_DATE', 
      1440*(END_TIME - START_TIME)) as "RUN_TIME" 
    from NI_INFA_ACTIVITY_LOG_V 
    ) 
group by START_DATE 
order by START_DATE 
; 

所有當過你綁定變量APEX或ID首先,你必須 前綴:其次是項目ID。

二,在case...when...then....end的列別名必須在end之後提及關鍵字。

三,不要在子查詢中使用group byorder by。如果你這樣做沒用。

+0

謝謝!除了有一個額外的圓括號,「... THEN TRUNC(start_time)」需要更改以匹配其他子句數據類型更改。 – Philab

+0

歡迎您。 –

0

您的子查詢需要別名。如果你想這樣做:

select something 
from 
(subquery goes here) 

你必須給它一個別名

select something 
from 
(subquery goes here) aliasName 

有你的代碼的其他問題也是如此。子查詢中的order by子句在最好情況下是無用的。