微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ORA-00904: "S"."AIR_TIME": 无效标识符

如何解决ORA-00904: "S"."AIR_TIME": 无效标识符

当在 distance 和 air_time 列中使用 sum 时,为什么此代码显示无效标识符? 当 sum 未使用时,此语句处理成功但使用 sum 时出现错误?我需要在这个语句中使用 sum。

 MERGE INTO FACT_COMPANY_GROWTH F
    USING (SELECT disTINCT TIME_ID,FLIGHT_KEY,AEROPLANE_KEY,SUM(disTANCE) AS TOTAL_disTANCE,SUM(AIR_TIME) AS TOTAL_AIRTIME
    FROM TRANSFORM_FLIGHT T
    INNER JOIN TRANSFORM_AEROPLANE A
    ON T.FK_AEROPLANE_KEY = A.AEROPLANE_KEY
    INNER JOIN DIM_TIME D
    ON D.YEAR = T.YEAR
    AND D.MONTH = T.MONTH
    GROUP BY TIME_ID,AEROPLANE_KEY) S
    ON (F.FK1_TIME_ID = S.TIME_ID
    AND F.FK2_FLIGHT_KEY = S.FLIGHT_KEY
    AND F.FK3_AEROPLANE_KEY = S.AEROPLANE_KEY
    ) 
    WHEN MATCHED THEN
    UPDATE SET
    F.TOTAL_AIRTIME = S.AIR_TIME,F.TOTAL_disTANCE = S.disTANCE,F.TOTAL_NO_OF_FLIGHTS = S.FLIGHT_KEY,F.TOTAL_NO_OF_AEROPLANE = S.AEROPLANE_KEY
    WHEN NOT MATCHED THEN
    INSERT(FACT_ID,FK1_TIME_ID,FK2_FLIGHT_KEY,FK3_AEROPLANE_KEY,TOTAL_disTANCE,TOTAL_AIRTIME,TOTAL_NO_OF_FLIGHTS,TOTAL_NO_OF_AEROPLANE)
    VALUES
    (NULL,S.TIME_ID,S.FLIGHT_KEY,S.AEROPLANE_KEY,S.disTANCE,S.AIR_TIME,S.AEROPLANE_KEY);

解决方法

USING(
    SELECT DISTINCT 
        TIME_ID,FLIGHT_KEY,AEROPLANE_KEY,SUM(DISTANCE) AS TOTAL_DISTANCE,SUM(AIR_TIME) AS TOTAL_AIRTIME
...) S

问题出在 UPDATE SET F.TOTAL_AIRTIME = S.AIR_TIMES 中定义了 5 个字段,没有一个名为 AIR_TIME

,
UPDATE SET
    F.TOTAL_AIRTIME = S.TOTAL_AIRTIME,F.TOTAL_DISTANCE = S.TOTAL_DISTANCE,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。