2016-11-29 218 views
0

我在sql和数据库方面还是有点新鲜。我觉得我错过了一些非常简单的事情,但我似乎无法弄清楚为什么我得到这个错误。Oracle/SQL 00904. 00000 - “%s:无效标识符”

ORA-00904: "Total Pay": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 

任何帮助表示赞赏。

with computed_pay as (select J.job_code, 
           case 
           when J.pay_type = 'salary' then J.pay_rate 
           when J.pay_type = 'wage' then J.pay_rate * 1920 
           else null 
           end "Total Pay" 
          from job J), 
     current_pay as (SELECT per_id, 
           "Total Pay", 
           primary_sector 
         FROM works 
         NATURAL JOIN job 
         NATURAL JOIN company 
         NATURAL JOIN job_profile), 
     old_pay as (SELECT per_id, 
          "Total Pay", 
          primary_sector 
        FROM works 
        NATURAL JOIN job 
        NATURAL JOIN company 
        NATURAL JOIN job_profile), 
     num_increase as (SELECT * 
          FROM current_pay C 
          WHERE EXISTS (SELECT I.per_id 
              FROM old_pay I 
              WHERE C.per_id = I.per_id) AND 
           "Total Pay" > all (SELECT "Total Pay" 
                FROM old_pay O 
                WHERE C.per_id = O.per_id)), 
     num_decrease as (SELECT * 
          FROM current_pay C 
          WHERE EXISTS (SELECT I.per_id 
              FROM old_pay I 
              WHERE C.per_id = I.per_id) AND 
           "Total Pay" < all (SELECT "Total Pay" 
                FROM old_pay O 
                WHERE C.per_id = O.per_id)) 
select (case 
      when (SELECT COUNT(*) FROM num_increase) <> 0 then 
      (SELECT COUNT(*) FROM num_decrease)/
       (SELECT COUNT(*) FROM num_increase) 
     end) as ratio 
    from dual; 
+0

请编辑您的问题,并为'works','job','company'和'job_profile'表或视图添加DDL。没有这些信息,任何人都无法回答。谢谢。 –

回答

0

我认为你打算使用computed_pa​​y来代替工作,但是你并没有真正改变对工作的引用。

我也建议不要使用NATURAL JOIN。它使用列名来猜测如何连接表,并且如果您具有通用列(例如CREATED_ON或CREATED_BY),它将会中断,最终您将重写所有的SQL。

相关问题