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.