公用表表达式别名名称问题

时间:2014-06-20 17:09:57

标签: oracle alias

我正在尝试使用公用表表达式(CTE)将BREAK_TIME和DIFF_OUT的列值插入到我的基表ezlabor_final_ak中,但是它给出了错误消息

  

ORA-00904:“B”。“IN_TIME”:无效的标识符'

我实际上将B作为Alias名称给了我的CTE,但它正在抛出错误。请帮助纠正错误。请参阅以下代码:

 INSERT INTO ezlabor_final_ak(BREAK_TIME,DIFF_IN_OUT)    
     SELECT BREAK_TIME,DIFF_IN_OUT FROM (
     WITH CTE_RN 
     AS
(
    SELECT t.out_time,t.in_time,t.Employee,
        ROW_NUMBER() OVER(ORDER BY In_Time) AS RN
    FROM ezlabor_final_ak t
    WHERE employee = 'JHW004605' AND TO_CHAR(in_time, 'dd/mm/yyyy') = '21/11/2013' 
)
   SELECT
    a.Employee,TO_CHAR(a.in_time,'dd/mm/yyyy hh:mi:ss'),TO_CHAR(a.out_time,'dd/mm/yyyy hh:mi:ss'),a.RN as ARN,
   TO_CHAR(p.out_time,'dd/mm/yyyy hh:mi:ss'),TO_CHAR(p.in_time,'dd/mm/yyyy hh:mi:ss'),p.RN AS PRN,
    (a.in_time - p.out_time)*24*60 AS BREAK_TIME,
    (a.OUT_TIME - a.IN_TIME)*24*60 AS DIFF_IN_OUT
FROM CTE_RN a
LEFT JOIN CTE_RN  p
    ON p.EMPLOYEE = a.EMPLOYEE AND
       p.RN = a.RN - 1
       WHERE a.employee = 'JHW004605' AND TO_CHAR(a.in_time, 'dd/mm/yyyy') = '21/11/2013' 
      ) b   
WHERE b.employee = 'JHW004605' AND TO_CHAR(b.in_time, 'dd/mm/yyyy') = '21/11/2013' 

0 个答案:

没有答案