sql >> Databáze >  >> RDS >> Oracle

Oracle:Concat s oddělovačem, ale pouze pokud oba operandy NEJSOU NULL

Vím, že používáte 10 g, takže to nebude fungovat. Ale pro úplnost, LISTAGG() zpracovává NULL hodnoty "správně". K tomu byste však museli aktualizovat na 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;

Nebo trochu stručněji, pokud chcete vypsat sloupce z tabulky:

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

Nebo proti skutečné tabulce:

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;

Teď si nejsem jistý, jestli je to o tolik lepší (čitelnější) než tvůj původní příklad :-)



  1. Presto ekvivalent MySQL group_concat

  2. MySQL aktualizuje celou databázi bez prostojů

  3. php + naplnit rozevírací nabídku při výběru jiného

  4. Jak najít a nahradit text v databázi MySQL pomocí SQL