Oracle Pivot & Update



我正在开发一个oracle更新sql。使用MERGE功能。我正在为源表使用Pivot-sql,并使用Pivot生成的列更新目标表列。我面临的问题是pivot列名是动态生成的,并且我得到了"无效标识符"的错误。

下面是我正在使用的sql示例:

    MERGE INTO DEST
USING(
    WITH T AS(
        SELECT COL1,COL2, PIVOTBASECOL,PIVOTMEASURE
        FROM T1
        LEFT JOIN T2 ON T1.C1=T2.C1
        )
        SELECT * FROM T PIVOT(
        SUM(PIVOTMEASURE) GAIN FOR PIVOTBASECOL IN('MECH','AL','FAC','OPNS','RMD'))
)SRC ON SRC.COL1=DEST.COL1 AND SRC.COL2=DEST.COL2
WHEN MATCHED THEN
UPDATE
SET DEST.GAIN_MECH=SRC.MECH_GAIN
, DEST.GAIN_AL=SRC.AL_GAIN
, DEST.GAIN_FAC=SRC.FAC_GAIN
, DEST.GAIN_OPNS=SRC.OPNS_GAIN
, DEST.GAIN_RMD=SRC.RMD_GAIN

SRC列表示"无效标识符",因为透视结果列为"MECH"_GAIN、"AL"_GAIN。。。我怎么能解决这个问题!

可以为每个透视表达式定义别名:

PIVOT (
    COUNT(DUMMY) POSTFIX
    FOR DUMMY IN ('X' ALIAS)
)

如果在聚合函数后不使用POSTFIX,则列的名称仅为ALIAS,否则为ALIAS_POSTFIX。数据透视列命名处于完全控制之下。

最新更新