我正在开发一个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。数据透视列命名处于完全控制之下。