Zakładając, że Twoje podzapytanie już otrzymuje poprawną wartość i pytasz tylko, jak uzyskać obie wartości „artykułu” w tej samej kolumnie, wszystko, co musisz zrobić, to przenieść podzapytanie do drugiego when
sprawdź w pierwszym case
wyrażenie, zamiast jako osobna kolumna:
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
Możesz zastąpić podzapytanie lewym sprzężeniem z powrotem do tej samej tabeli i połączyć wyniki:
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
... ale to powoduje pewne założenia dotyczące hierarchii, więc prawdopodobnie musisz zaostrzyć połączenie w oparciu o typ listy.
db<>skrzypce z wymyślonymi relacjami między tymi samymi sześcioma wierszami, które pokazałeś, ponieważ nie mamy rzeczywistych identyfikatorów.