sql >> Database >  >> RDS >> Oracle

Oracle retourneert dezelfde alias voor verschillende gevallen op select

Ervan uitgaande dat uw subquery al de juiste waarde terugkrijgt en u alleen vraagt ​​hoe u beide 'article'-waarden in dezelfde kolom kunt krijgen, hoeft u alleen de subquery naar een tweede when te verplaatsen check binnen de eerste case uitdrukking, in plaats van als zijn eigen kolom:

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

Je zou de subquery kunnen vervangen door een left join terug naar dezelfde tabel en de resultaten samenvoegen:

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

... maar dat is het maken van enkele aannames over de hiërarchie, dus je moet waarschijnlijk de samenvoeging aanscherpen op basis van het lijsttype.

db<>fiddle met verzonnen relaties tussen dezelfde zes rijen die je liet zien, omdat we niet de werkelijke ID's hebben.




  1. MySQL - INSERT INTO vanuit een tijdelijke tabel

  2. Hoe gebruik je witte lijsten en voorbereide verklaringen met Postgresql in php?

  3. Kan de sleutel niet laten vallen, ook al bestaat deze:Foutcode:1091

  4. ORDER BY RAND() lijkt minder dan willekeurig te zijn