Supondo que sua subconsulta já obtenha o valor correto de volta e você esteja apenas perguntando como obter os dois valores de 'artigo' na mesma coluna, tudo o que você precisa fazer é mover a subconsulta para um segundo
when
verifique no primeiro case
expressão, em vez de como sua própria coluna: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
Você pode substituir a subconsulta por uma junção esquerda de volta à mesma tabela e unir os 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
... mas isso está fazendo algumas suposições sobre a hierarquia, então você provavelmente precisa apertar a junção com base no tipo de lista.
db<>fiddle com relacionamentos inventados entre as mesmas seis linhas que você mostrou, pois não temos os IDs reais.