Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle SQL Merge Nhiều hàng có cùng ID nhưng không có số nhận dạng thứ tự

Một cái gì đó như thế này (giả sử không có hàng trùng lặp nào trong bảng nhập liệu - nếu có, giải pháp cần được sửa đổi một chút).

Trong giải pháp, tôi xây dựng test_table để thử nghiệm (nó không phải là một phần của giải pháp) và tôi xây dựng một truy vấn con có tính giai thừa khác trong mệnh đề WITH. Điều này hoạt động trong Oracle 11 trở lên. Đối với các phiên bản trước của Oracle, truy vấn con được định nghĩa là prep thay vào đó cần được chuyển dưới dạng truy vấn con trong truy vấn cuối cùng.

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
;

Đầu ra :

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. Thông báo lỗi biến liên kết không hợp lệ trong trình kích hoạt

  2. Lỗi không thể tìm thấy loại hoặc không gian tên 'oracle'

  3. DBMS_SCHEDULER.DROP_JOB chỉ khi tồn tại

  4. Làm thế nào để sử dụng một lược đồ bởi nhiều người dùng mà không cần sửa trước tên lược đồ trước các đối tượng?

  5. Cố gắng tạo một gói - lỗi PLS-00330