es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Oracle: Reemplazar valores nulos en columnas de pivote con unir de otra tabla.

Tienes una salida de tabla dinámica y ahora quieres revisar los valores de las columnas de la tabla dinámica y reemplazar los valores nulos con otra columna de otra tabla.

No. de Factura Columna Valor
111 A Uno
111 B Dos
111 C Tres
111 E Cinco

(SELECCIONAR No._de_factura, nuevo_valor, Nombre_de_Columna DE nombre_de_tabla)
PIVOT (max(nuevo_valor)
PARA Nombre_de_Columna IN (‘A’, ‘B’, ‘C’, ‘D’, ‘E’))

Esto devolvió la siguiente tabla:

No. de Factura ‘A’ ‘B’ ‘C’ ‘D’ ‘E’
111 Uno Dos Tres null Cinco

Ahora, quiero reemplazar el valor nulo de la columna D con un valor de otra tabla que coincida con el número de factura.

with temp as
(SELECCIONAR No._de_factura, nuevo_valor, Nombre_de_Columna DE nombre_de_tabla)
PIVOT (max(nuevo_valor)
PARA Nombre_de_Columna IN (‘A’, ‘B’, ‘C’, ‘D’, ‘E’))
SELECT nvl(temp.D, backup.D)
FROM
(SELECCIONAR A, B, C, D, E De Backup_table) bckup
UNION SELCCIÓN
temp
EN
temp.No._de_factura = bckup.No._de_factura

Ahora estoy recibiendo el error diciendo que la columna D no existe.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Necesitas especificar el nombre de la columna en la sentencia select de la tabla temp. La tabla temp no tiene una columna D, por lo que necesitas especificar el nombre de la columna de la tabla bckup.

    con temp como
    (SELECT Invoice_No, new_value, Column_Name  FROM table_name)
    PIVOT(max(new_value) 
    FOR Column_Name IN ('A','B','C','D','E'))
    select nvl(temp.D,bckup.D)
    from
    (select A,B,C,D,E from Backup_table) bckup
    join
    temp
    on
    temp.Invoice_No = bckup = Invoice_No
    

    debe cambiarse a

    con temp como
    (SELECT Invoice_No, new_value, Column_Name  FROM table_name)
    PIVOT(max(new_value) 
    FOR Column_Name IN ('A','B','C','D','E'))
    select nvl(temp.D,bckup.D)
    from
    (select A,B,C,D,E from Backup_table) bckup
    join
    temp
    on
    temp.Invoice_No = bckup = Invoice_No
    

Comments are closed.