Suponiendo que su subconsulta ya recupere el valor correcto, y solo está preguntando cómo obtener ambos valores de 'artículo' en la misma columna, todo lo que necesita hacer es mover la subconsulta a un segundo when
verifique dentro del primer case
expresión, en lugar de como su propia columna:
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
Puede reemplazar la subconsulta con una combinación izquierda de regreso a la misma tabla y fusionar los resultados:
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
... pero eso es hacer algunas suposiciones sobre la jerarquía, por lo que probablemente necesite ajustar la unión según el tipo de lista.
db<>fiddle con relaciones inventadas entre las mismas seis filas que mostraste, ya que no tenemos las identificaciones reales.