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,