Oracle中UNPIVOT与PIVOT使用报错:需将hour_key置于行中求助
问题分析与SQL修正
原SQL的错误点
- UNPIVOT子句中重复使用
hour_key作为目标列和透视列,且与子查询中的hour_key字段重名,直接引发标识符冲突报错。 - 你的需求是将
hour_key作为行维度,同时把不同天数的指标值转为列(hand_48、hand_24),但原SQL错误地使用了UNPIVOT——实际上hour_key已经是行级数据,不需要做列转行操作,直接做行转列的PIVOT即可。
修正后的SQL代码
SELECT cell_name, hour_key, hand_48, hand_24 FROM (SELECT cell_name, hour_key, handover_preparation_rate_eucell_eric_, TRUNC(sysdate) - TO_DATE(date_key, 'yyyymmdd') AS days FROM edw.fct_prse4g_cell_kpi_h WHERE province = 'KJ' AND date_key BETWEEN TO_CHAR(sysdate - 2, 'yyyymmdd') AND TO_CHAR(sysdate - 1, 'yyyymmdd') AND hour_key BETWEEN 0 AND 8) PIVOT( SUM(handover_preparation_rate_eucell_eric_) FOR days IN(2 AS hand_48, 1 AS hand_24) ) pvt1 ORDER BY hour_key;
修正说明
- 移除了多余的UNPIVOT操作,保留
hour_key作为行维度字段。 - 明确指定返回列,避免冗余字段干扰结果展示。
- 添加
ORDER BY hour_key,让结果按小时顺序排列,更贴合预期的展示效果。
内容的提问来源于stack exchange,提问作者saeedeh
相关产品推荐
相关产品推荐

