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.