2016-04-06 15 views
0

誰かが私のクエリを見てください。 コメントフィールドのいずれかをコメント解除しようとすると、Oracleがエラーをスローします。ORA-00918:ピボットを使用しているときに列があいまいに定義されています

SELECT * 
FROM ( 
       SELECT ratfac.rating_id, 
        ratfac.label_en, 
        ratfac.ratingmodel_factor_id, 
        ratfac.weight, 
        ratfac.rating_calculated, 
        ratfac.rating, 
        ratfac.rating_adjusted, 
        ratfac.override_comment, 
        ratfac.rating_override, 
        ratfac.notch_value, 
        ratfac.notch_value_calculated, 
        ratfac.notch_value_adjusted, 
        ratfac.score, 
        ratfac.score_calculated, 
        ratfac.score_adjusted, 
        ratfac.factor_comment 
       FROM vw_ratingfactor ratfac) pivot (min(ratingmodel_factor_id) ratingmodel_factor_id, min(weight) weight, min(rating_calculated) rating_calculated, min(rating) rating, 
     --MAX(RATING_ADJUSTED) as RATING_ADJ, 
     min(override_comment) override_comment, min(rating_override) rating_override, min(notch_value) notch_value, 
     --MIN(NOTCH_VALUE_CALCULATED) NOTCH_VALUE_CALCULATED, 
     --MIN(NOTCH_VALUE_ADJUSTED) NOTCH_VALUE_ADJUSTED, 
     min(score) score, min(score_calculated) score_calculated, min(score_adjusted) score_adjusted, min(factor_comment) factor_comment FOR label_en IN ('Market' 
                                           || chr(38) 
                                           ||'Competitiveness'  AS marketcompetitiveness, 
                                         'Industry'      AS industry, 
                                         'Company Strategy and Management' AS company_stratergy_mgmt, 
                                         'Financial Performance'   AS financial_performance, 
                                         'Need for and Access to Funds' AS needforfunds)) 
+0

はあなたcorrrectlyエイリアス最大(rating_adjusted) – cableload

+0

から来て、それはあなたが私の一日 を保存した2回目のTIS、再び –

答えて

0

問題は、ピボット列の生成された列名の長さです。

あなたが持っている最長の接頭辞は、22文字のcompany_stratergy_mgmtです。アンダースコアは集計エイリアスの前に自動的に追加されるため、the 30-character column name limitを押す前に7文字しか残しません。 Oracleは、生成された名前をその30文字の制限で自動的に切り捨てて、重複を引き起こしています。

いくつかの凝集体はOKである。 ratingcompany_stratergy_mgmt_rating - 29文字を生成します。あなたはrating_%のような名前のの1つを持つことができます。それはのような名前を生成しようとしますので、しかし、あなたは、2を持っている:

company_stratergy_mgmt_rating_calculated -> company_stratergy_mgmt_rating_ 
company_stratergy_mgmt_rating    OK 
company_stratergy_mgmt_rating_override -> company_stratergy_mgmt_rating_ 

company_stratergy_mgmt_rating_calculatedcompany_stratergy_mgmt_rating_override両方を同じ 30文字の名前、company_stratergy_mgmt_rating_に切り捨てられます。そして、それらが同じであるため、列名は重複しているため、ORA-00918エラーです。

他にも同じ問題がありますが、これは単なる例です。 company_stratergyのスペルを修正した場合は、rを失うことになり、rating_adjustmentの集計のコメントを外したとしても、_a_c_oで終わり、再びユニークになるので、それらの列でそれを取り除くことになります。しかし、notch_value_%集合体のコメントを外すと、同じ問題が発生します。

したがって、生成されたすべての名前が切り捨てられないように、短い接頭辞または短い集約の別名を選択する必要があります。切り捨てられた場合、それらは一意です。

+0

おかげで動作しないことを試みたある特定のどのテーブルによると、私はビールを借りていると考えることができます –

関連する問題