2016-11-29 34 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

私はjobの代わりにcomputed_pa​​yを使用しようとしていますが、jobへの参照を実際に変更していないと思います。

NATURAL JOINを使用しないことをおすすめします。列名を使用して表を結合する方法を推測します。また、CREATED_ONやCREATED_BYなどの汎用列を使用すると、すべてのSQLを書き直すことになります。

関連する問題