2015-11-24 3 views
0

Я работаю над sql update of sql. Использование функции MERGE. Я использую Pivot sql для моей исходной таблицы и обновляю столбцы таблицы назначения с результирующими столбцами из точки опоры. проблема, с которой я столкнулся, - это имена столбцов сводной таблицы, которые динамически генерируются, и я получаю ошибку «недопустимый идентификатор».Oracle Pivot & Update

Ниже приведен пример 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 ... как мог я решить эту проблему!

ответ

1

Псевдонимы могут быть определены для каждого выражения шарнира:

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

Если вы не используете Postfix после функции агрегирования названия колонки только ALIAS, в противном случае ALIAS_POSTFIX. Именование имен столбцов находится под полным контролем.