sql >> Database teknologi >  >> RDS >> Oracle

Oracle:Concat med skilletegn, men kun hvis begge operander IKKE er NULL

Jeg ved, du bruger 10 g, så det virker ikke. Men for fuldstændighedens skyld, LISTAGG() håndterer NULL værdier "korrekt". For det skal du dog opdatere til 11g2:

-- Nogle eksempeldata, der nogenlunde svarer til din med t as (vælg 'foo' som x fra dual union alle vælg null fra dual union alle vælg 'bar' fra dual)-- Brug listagg-aggregatfunktionen til at deltage i alle værdier, vælg listagg(x, ';') i gruppen (rækkefølge efter rækkenummer) fra t;

Eller lidt mere kortfattet, hvis du vil have en liste over kolonner fra en tabel:

-- Jeg bruger SYS.ORA_MINING_VARCHAR2_NT som en TABELTYPE. Brug din egen, hvis du foretrækker, vælg listagg(column_value, ';') i gruppen (rækkefølge efter rækkenummer) fra tabel(ORA_MINING_VARCHAR2_NT('foo', null, 'bar'));

Eller mod en faktisk tabel:

vælg listagg(column_value, ';') inden for gruppe (rækkefølge efter rækkenummer) fra Tabel1kryds-sammenføjningstabel(ORA_MINING_VARCHAR2_NT(Tabel1.a, Tabel1.b, Tabel1.c))grupper efter Tabel1.id; 

Nu er jeg ikke sikker på, om dette er så meget bedre (mere læsbart) end dit originale eksempel :-)



  1. Ugyldigt argument angivet for foreach() i Codeigniter

  2. SELECT i MySQL fungerer ikke

  3. MySQL-forespørgsel virker ikke, mens du bruger php-variabel i where-klausulen

  4. Bedste metode til at gemme en liste over bruger-id'er