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

Oracle SQL Menggabungkan Beberapa Baris Dengan ID Yang Sama Tetapi Pengidentifikasi Rusak

Kira-kira seperti ini (dengan asumsi tidak ada baris duplikat di tabel input - jika ada, solusinya perlu diubah sedikit).

Dalam solusi saya membangun test_table untuk pengujian (ini bukan bagian dari solusi), dan saya membangun subquery terfaktor lain dalam klausa WITH. Ini berfungsi di Oracle 11 dan di atasnya. Untuk Oracle versi sebelumnya, subquery didefinisikan sebagai prep perlu dipindahkan sebagai subkueri dalam kueri akhir.

with
     test_table ( id, identifiers ) as (
       select '1', '|1|2|'        from dual union all
       select '1', '|2|1|'        from dual union all
       select '2', '|3|A|1|B|'    from dual union all
       select '2', '|B|1|3|A|'    from dual union all
       select '3', '|1|3|2|'      from dual union all
       select '3', '|1|5|'        from dual union all
       select '3', '|2|1|3|'      from dual union all
       select '4', '|AA|BB|1|3A|' from dual union all
       select '4', '|1|3A|AA|BB|' from dual
     ),
     prep ( id, identifiers, token ) as (
       select id, identifiers, regexp_substr(identifiers, '[^|]+', 1, level)
       from   test_table
       connect by level <= regexp_count(identifiers, '\|') - 1
           and prior identifiers = identifiers
           and prior sys_guid() is not null
     )
select distinct id, 
       '|' || listagg(token, '|') within group (order by token) || '|'
                                                as identifiers
from   prep
group by id, identifiers
order by id, identifiers    --  ORDER BY is optional
;

Keluaran :

ID  IDENTIFIERS
--- --------------------
1   |1|2|
2   |1|3|A|B|
3   |1|2|3|
3   |1|5|
4   |1|3A|AA|BB|

5 rows selected.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan nilai dbms.output yang dikembalikan oleh blok PL-SQL di C#

  2. Pemeriksa sintaks SQL online yang sesuai dengan banyak basis data

  3. Oracle menggunakan atau mengabaikan kolom yang diindeks tergantung pada format to_date(literal)

  4. Mengapa saya dapat menggunakan karakter yang bukan bagian dari rangkaian karakter (windows-1252)?

  5. Mencoba mendapatkan data aktual yang menyebabkan pengecualian