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

Oracle SQL Обединяване на множество редове с един и същи идентификатор, но неправилни идентификатори

Нещо подобно (ако приемем, че няма дублиращи се редове във входната таблица - ако има, решението трябва да се модифицира малко).

В решението изграждам test_table за тестване (това не е част от решението) и изграждам друга факторизирана подзаявка в клаузата WITH. Това работи в Oracle 11 и по-нови версии. За по-стари версии на Oracle, подзаявката, дефинирана като prep вместо това трябва да се премести като подзаявка в крайната заявка.

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
;

Изход :

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. Колоната се актуализира въз основа на предишен запис

  2. Резервиране на Oracle RAC N+1

  3. създаване на колона за идентификатор въз основа на данни за дейността

  4. flyway clean не изпуска задания или програми на планировчика

  5. Свързване на оракула в приложението за Android