有人可以看看我的查询。 当我试图取消评论任何评论字段时,oracle会抛出错误。
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 :(得分:2)
问题是生成的列的名称长度。
您拥有的最长前缀为company_stratergy_mgmt
,即22个字符。在聚合别名之前会自动添加下划线,因此在您点击the 30-character column name limit之前只剩下7个字符。 Oracle正在以30-char的限制默默地截断生成的名称,这导致了重复项。
某些聚合是正常的,例如rating
,生成company_stratergy_mgmt_rating
- 29个字符。然后,您可以拥有一个的名称,例如rating_%
。但你有两个,所以它试图生成如下名称:
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_calculated
和company_stratergy_mgmt_rating_override
都被截断为相同 30个字符的名称company_stratergy_mgmt_rating_
。因为它们是相同的,列名是重复的,因此ORA-00918错误。
其他人也有同样的问题,这些只是一些例子。如果您修改了company_stratergy
的拼写而失去了额外的r
,那么您就可以使用这些列来消除它,即使您取消注释了rating_adjustment
聚合,也会如此以_a
,_c
和_o
结束并再次独一无二。但是,如果取消注释notch_value_%
聚合,您仍会遇到同样的问题。
因此,您需要选择较短的前缀或较短的聚合别名,以便最好不截断所有生成的名称,如果它们被截断,则它们仍然是唯一的。