ORA-00918: 使用数据透视时列定义不明确
Posted
技术标签:
【中文标题】ORA-00918: 使用数据透视时列定义不明确【英文标题】:ORA-00918: column ambiguously defined when using pivot 【发布时间】:2016-04-06 15:30:24 【问题描述】:有人可以看看我的查询。 当我尝试取消注释任何已注释的字段时,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 ) )
【问题讨论】:
你能根据它来自哪个特定表正确地别名 max(rating_adjusted) 试过不行 【参考方案1】:问题在于为透视列生成的列名的长度。
您拥有的最长前缀是 company_stratergy_mgmt
,即 22 个字符。聚合别名前会自动添加下划线,因此您在点击 the 30-character column name limit 之前只剩下 7 个字符。 Oracle 会在 30 个字符的限制下静默截断生成的名称,这会导致重复。
一些聚合是好的,例如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
、@987654334 结尾@ 和 _o
并再次变得独一无二。但是,如果您取消注释 notch_value_%
聚合,您仍然会遇到同样的问题。
所以你需要选择更短的前缀,或者更短的聚合别名,这样所有生成的名称最好不被截断,如果它们被截断,那么它们仍然是唯一的。
【讨论】:
以上是关于ORA-00918: 使用数据透视时列定义不明确的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00918: FOR pharmacyschema.sql (RX 药房数据库) 的列定义不明确
Oracle Pivot 和 Pivot XML - ORA-00918:列定义不明确