sql >> Base de Datos >  >> RDS >> Oracle

Oracle devuelve el mismo alias para diferentes casos en select

Suponiendo que su subconsulta ya recupere el valor correcto, y solo está preguntando cómo obtener ambos valores de 'artículo' en la misma columna, todo lo que necesita hacer es mover la subconsulta a un segundo when verifique dentro del primer case expresión, en lugar de como su propia columna:

SELECT
     tbl.parent,
     list.list_value,
     tbl.values_column,
     CASE
         WHEN list.list_value = 'Article' THEN tbl.values_column
         WHEN list.list_value = 'Paragraph' THEN (
             SELECT
                 values_column
             FROM
                 pro_table
             WHERE
                 pro_table.id_pro_table = tbl.parent
         )
     END AS article,
     CASE
         WHEN list.list_value = 'Paragraph' THEN tbl.values_column
     END AS paragraph
 FROM
     pro_table tbl 
     LEFT JOIN list ON list.id_list = tbl.id_t_list

Puede reemplazar la subconsulta con una combinación izquierda de regreso a la misma tabla y fusionar los resultados:

SELECT
     tbl.parent,
     list.list_value,
     tbl.values_column,
     COALESCE (
         CASE
             WHEN list.list_value = 'Article' THEN tbl.values_column
         END,
         tbl2.values_column
     ) AS article,
     CASE
         WHEN list.list_value = 'Paragraph' THEN tbl.values_column
     END AS paragraph
 FROM
     pro_table tbl 
     LEFT JOIN list ON list.id_list = tbl.id_t_list
     LEFT JOIN pro_table tbl2 ON tbl2.id_pro_table = tbl.parent

... pero eso es hacer algunas suposiciones sobre la jerarquía, por lo que probablemente necesite ajustar la unión según el tipo de lista.

db<>fiddle con relaciones inventadas entre las mismas seis filas que mostraste, ya que no tenemos las identificaciones reales.