sql >> Database teknologi >  >> RDS >> Oracle

Oracle returnerer samme alias for forskellige sager på udvalgte

Hvis du antager, at din underforespørgsel allerede får den korrekte værdi tilbage, og du bare spørger, hvordan du får begge "artikel"-værdier i den samme kolonne, er det eneste, du skal gøre, at flytte underforespørgslen til en anden when tjek inden for den første case udtryk, i stedet for som sin egen kolonne:

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

Du kan erstatte underforespørgslen med en venstre join tilbage til den samme tabel og samle resultaterne:

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

... men det giver nogle antagelser om hierarkiet, så du er sandsynligvis nødt til at stramme sammenføjningen baseret på listetypen.

db<>violin med opfundne relationer mellem de samme seks rækker, som du viste, da vi ikke har de faktiske id'er.




  1. Tom erklæring i T-SQL

  2. venstre ydre sammenføjning, hvor tabellerne er fra to forskellige databasesystemer

  3. ORA-01745 fejl under udførelse af parametriserede forespørgsler i c#

  4. Mere SQL, mindre kode, med PostgreSQL