Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:Concat dengan pembatas, tetapi hanya jika kedua operan TIDAK NULL

Saya tahu Anda menggunakan 10g, jadi itu tidak akan berhasil. Tapi untuk kelengkapan, LISTAGG() menangani NULL nilai "dengan benar". Untuk itu, Anda harus memperbarui ke 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;

Atau sedikit lebih ringkas, jika Anda ingin membuat daftar kolom dari tabel:

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

Atau terhadap tabel yang sebenarnya:

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;

Sekarang saya tidak yakin apakah ini jauh lebih baik (lebih mudah dibaca) daripada contoh asli Anda :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengecualian PDO tidak dilemparkan untuk kesalahan pemicu

  2. Oracle cara mengubah kolom menjadi baris tanpa UNION

  3. Bagaimana cara mengambil acara berikutnya ketika offsetnya variabel?

  4. Sepenuhnya Memahami PDO ATTR_PERSISTENT

  5. Bagaimana saya bisa menghubungkan ORACLE dari EXCEL dengan JDBC?