En supposant que votre sous-requête récupère déjà la valeur correcte et que vous demandez simplement comment obtenir les deux valeurs "article" dans la même colonne, tout ce que vous avez à faire est de déplacer la sous-requête dans un second when
vérifier dans le premier case
expression, au lieu de sa propre colonne :
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
Vous pouvez remplacer la sous-requête par une jointure gauche vers la même table et fusionner les résultats :
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
... mais cela implique des hypothèses sur la hiérarchie, vous devrez donc probablement resserrer la jointure en fonction du type de liste.
db<>violon avec des relations inventées entre les mêmes six lignes que vous avez montrées, car nous n'avons pas les identifiants réels.