Ако приемем, че вашата подзаявка вече получава правилната стойност обратно и вие просто питате как да получите и двете стойности на „статия“ в една и съща колона, всичко, което трябва да направите, е да преместите подзаявката във втора when
проверка в рамките на първия case
израз, вместо като собствена колона:
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
Можете да замените подзаявката с ляво съединение обратно към същата таблица и да обедините резултатите:
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
... но това прави някои предположения относно йерархията, така че вероятно трябва да затегнете обединяването въз основа на типа списък.
db<>цигулка с измислени връзки между същите шест реда, които показахте, тъй като нямаме действителните идентификатори.