Обновить запрос teradata с помощью вложенного оператора select - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь заменить выбор в другую таблицу с такими же параметрами.

UPDATE DL_RG_ANALYTICS.SH_historico_1
FROM
(
    SELECT
        ANO_MES, TIP_TAR,DIA_PAGO, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL, TRAMO_PAGO, TIPO_MORA, MES
        ,CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1

    FROM



    (SELECT * FROM DL_RG_ANALYTICS.SH_historico_1 A
            LEFT JOIN 
                (SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
                GROUP BY 1) B
            ON A.ANO_MES = B.ANOMES
    ) M

)

Проблема в том, что когда я делаю оператор обновления, он делает работу

Другой способ это создать другую таблицу с той же структурой и информацией .. как это

CREATE TABLE DL_RG_ANALYTICS.SH_HISTORICO_2 AS (


SELECT
    ANO_MES, TIP_TAR, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL, TRAMO_PAGO, CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1, TIPO_MORA, MES

FROM

(SELECT * FROM DL_RG_ANALYTICS.SH_historico_1 A
        LEFT JOIN 
            (SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
            GROUP BY 1) B
        ON A.ANO_MES = B.ANOMES
) M   

   ) 
WITH DATA;

Но это не эффективный режим.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 08 января 2020

Если вы хотите сделать UPDATE, вам нужно использовать SET для установки значений. Попробуйте что-то вроде:

UPDATE DL_RG_ANALYTICS.SH_historico_1 
FROM (
  SELECT 
    ANO_MES, TIP_TAR,DIA_PAGO, MARCA_RENEG, MONTO, TRAMO_MORA, DIA_PAGO, CASOS, CANAL,
    TRAMO_PAGO, TIPO_MORA, MES,CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
  FROM (
    SELECT * 
    FROM DL_RG_ANALYTICS.SH_historico_1 A
    LEFT JOIN (
      SELECT ANO||MES AS ANOMES, MAX(DIA) AS MAX_DIA 
      FROM DL_RG_ANALYTICS.SH_CALENDARIO
      GROUP BY 1
    ) B ON A.ANO_MES = B.ANOMES
  ) M
) src -- source rows
SET col1 = src.col1 -- set new value(s)
WHERE SH_historico_1.pk_col = src.pk_col  -- needs to be 1-1

Просто убедитесь, что ваше условие соединения в предложении WHERE является отношением 1-1, поэтому у вас нет нескольких исходных строк, пытающихся обновить одну целевую строку.

...