sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Concat med avgränsare, men bara om båda operanderna INTE är NULL

Jag vet att du använder 10g, så det fungerar inte. Men för fullständighetens skull, LISTAGG() hanterar NULL värden "korrekt". För det måste du dock uppdatera till 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;

Eller lite mer kortfattat, om du vill lista kolumner från en tabell:

-- 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'));

Eller mot en faktisk tabell:

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 är jag inte säker på om detta är så mycket bättre (läsare) än ditt ursprungliga exempel :-)



  1. radera * från tabellen fungerar inte

  2. Skapa eller ersätt trigger postgres

  3. Fråga två tabeller från olika scheman

  4. Okänt kolumnfel i denna COUNT MySQL-sats?