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.