sql >> Database >  >> RDS >> Oracle

Oracle:Concat met scheidingsteken, maar alleen als beide operanden NIET NULL zijn

Ik weet dat je 10g gebruikt, dus dat zal niet werken. Maar voor de volledigheid:LISTAGG() behandelt NULL waarden "juist". Daarvoor moet je wel updaten naar 11g2:

-- Some sample data, roughly equivalent to yours
with t as (
  select 'foo' as x from dual union all
  select null       from dual union all
  select 'bar'      from dual
)
-- Use the listagg aggregate function to join all values
select listagg(x, ';') within group (order by rownum)
from t;

Of iets beknopter, als u kolommen uit een tabel wilt weergeven:

-- I use SYS.ORA_MINING_VARCHAR2_NT as a TABLE TYPE. Use your own, if you prefer
select listagg(column_value, ';') within group (order by rownum)
from table(ORA_MINING_VARCHAR2_NT('foo', null, 'bar'));

Of tegen een echte tafel:

select listagg(column_value, ';') 
       within group (order by rownum)
from Table1
cross join table(ORA_MINING_VARCHAR2_NT(Table1.a, Table1.b, Table1.c))
group by Table1.id;

Nu weet ik niet zeker of dit zoveel beter (leesbaarder) is dan je originele voorbeeld :-)



  1. Tabellen met meerdere niveaus kopiëren in mssql

  2. Is er MySQL.. INSERT ... ON DUPLICATE KEY SELECT?

  3. Wat is de dubbele tabel in Oracle?

  4. Indexen op primaire en externe sleutels