Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle renvoie le même alias pour différents cas lors de la sélection

En supposant que votre sous-requête récupère déjà la valeur correcte et que vous demandez simplement comment obtenir les deux valeurs "article" dans la même colonne, tout ce que vous avez à faire est de déplacer la sous-requête dans un second when vérifier dans le premier case expression, au lieu de sa propre colonne :

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

Vous pouvez remplacer la sous-requête par une jointure gauche vers la même table et fusionner les résultats :

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

... mais cela implique des hypothèses sur la hiérarchie, vous devrez donc probablement resserrer la jointure en fonction du type de liste.

db<>violon avec des relations inventées entre les mêmes six lignes que vous avez montrées, car nous n'avons pas les identifiants réels.