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

Oracle restituisce lo stesso alias per casi diversi su select

Supponendo che la tua sottoquery ottenga già il valore corretto e tu stia solo chiedendo come ottenere entrambi i valori "article" nella stessa colonna, tutto ciò che devi fare è spostare la sottoquery in un secondo when controlla nel primo case espressione, invece che come propria colonna:

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

Puoi sostituire la sottoquery con un join sinistro alla stessa tabella e unire i risultati:

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

... ma questo sta facendo alcune ipotesi sulla gerarchia, quindi probabilmente dovrai stringere l'unione in base al tipo di elenco.

db<>violino con relazioni inventate tra le stesse sei righe che hai mostrato, poiché non abbiamo gli ID effettivi.