Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle gibt denselben Alias ​​für verschiedene Fälle bei der Auswahl zurück

Angenommen, Ihre Unterabfrage erhält bereits den korrekten Wert zurück und Sie fragen nur, wie Sie beide „article“-Werte in derselben Spalte abrufen können, alles, was Sie tun müssen, ist, die Unterabfrage in ein zweites when zu verschieben überprüfen Sie im ersten case Ausdruck statt als eigene Spalte:

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

Sie könnten die Unterabfrage durch einen linken Join zurück zur selben Tabelle ersetzen und die Ergebnisse zusammenfügen:

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

... aber das macht einige Annahmen über die Hierarchie, also müssen Sie wahrscheinlich die Verknüpfung basierend auf dem Listentyp straffen.

db<>fiddle mit erfundenen Beziehungen zwischen denselben sechs Zeilen, die Sie gezeigt haben, da wir die tatsächlichen IDs nicht haben.