在CASE WHEN语句中获取缺少的关键字错误

时间:2015-06-16 19:13:50

标签: sql oracle plsql

我在Oracle SQL中遇到了丢失的关键字错误,我不确定原因。这是我的代码。我希望根据变量P1_DATE_CHOOSER将列拆分不同的时间。 (如果有帮助,我会使用Apex App Developer。)

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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 by order by。如果你这样做就没用了。

答案 1 :(得分:0)

您的子查询需要别名。如果你想这样做:

select something
from 
(subquery goes here)

你必须给它一个别名

select something
from 
(subquery goes here) aliasName

您的代码还存在其他问题。子查询中的order by子句最多也没用。