Hallo!
Ich möchte in einem sql statement sowohl ein case when als auch ein unnest einfügen. Das klappt allerdings nicht. Wie muss es umgebaut werden?
SELECT
id,
trim(unnest(string_to_array(test1, ’ + '))) as test1,
case when test2 like ’ und ’ then unnest(string_to_array(test2, ’ und ')) else test2 end as test2,
case when test3 like ’ und ’ then unnest(string_to_array(test3, ’ und ')) else test3 end as test3,
test4
FROM mytable;
Ein unnest() reicht und muss in das FROM verschoben werden. Das CASE ist meiner Meinung nach nicht notwendig, weil das string_to_array() den Eingabewert liefert wenn das Trennzeichen gar nicht vorkommt.
Wenn Du Dir sicher bist, dass in den drei Spalten immer etwas drin steht, dann sollte es so gehen:
SELECT id,
trim(t.t1) as test1,
t.t2 as test2,
t.t3 as test3,
test4
FROM mytable mt
cross join unnest(string_to_array(mt.test1, ' + '),
string_to_array(mt.test2, ' und '),
string_to_array(mt.test3, ' und ')) as t(t1, t2, t3)
Falls die Spalten leer oder NULL sein können, brauchst Du einen outer join “ohne” Join-Bedingung
SELECT id,
trim(t.t1) as test1,
t.t2 as test2,
t.t3 as test3,
test4
FROM mytable mt
left join unnest(string_to_array(mt.test1, ' + '),
string_to_array(mt.test2, ' und '),
string_to_array(mt.test3, ' und ')) as t(t1, t2, t3) on true