Case when und unnest im selben statement

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;

Vielen Dank für euren Support!
LG salix

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

Danke! Das klappt so für mich!
LG

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.