Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle retorna o mesmo alias para diferentes casos em select


Supondo que sua subconsulta já obtenha o valor correto de volta e você esteja apenas perguntando como obter os dois valores de 'artigo' na mesma coluna, tudo o que você precisa fazer é mover a subconsulta para um segundo when verifique no primeiro case expressão, em vez de como sua própria coluna:
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

Você pode substituir a subconsulta por uma junção esquerda de volta à mesma tabela e unir os 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

... mas isso está fazendo algumas suposições sobre a hierarquia, então você provavelmente precisa apertar a junção com base no tipo de lista.

db<>fiddle com relacionamentos inventados entre as mesmas seis linhas que você mostrou, pois não temos os IDs reais.