Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Concat с разделител, но само ако и двата операнда НЕ са NULL

Знам, че използвате 10 g, така че няма да работи. Но за пълнота, LISTAGG() обработва NULL оценява "правилно". За целта обаче ще трябва да актуализирате до 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;

Или малко по-сбито, ако искате да изброите колони от таблица:

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

Или срещу действителна таблица:

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;

Сега не съм сигурен дали това е много по-добро (по-четливо) от оригиналния ви пример :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на анализатора на база данни Oracle от Java с помощта на JDBC

  2. Свържете и обработвайте данни на oracle от Objective-C на Mac OS

  3. Каква е разликата между функциите RANK() и DENSE_RANK() в oracle?

  4. Oracle SQL Connect By Logic

  5. Заявка за съхранена процедура на Oracle като неработеща с курсора