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.