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

Nối các giá trị từ nhiều cột trong Oracle

SQL Fiddle

Thiết lập lược đồ Oracle 11g R2 :

CREATE TABLE test (col1, col2, col3, col4, col5 ) AS
          SELECT 1, 'A', 'B', 'C', 'D' FROM DUAL
UNION ALL SELECT 2, 'A', 'B', 'C', NULL FROM DUAL
UNION ALL SELECT 3, 'C', 'A', NULL, NULL FROM DUAL
UNION ALL SELECT 4, 'D', 'A', 'C', NULL FROM DUAL
UNION ALL SELECT 5, NULL, NULL, NULL, NULL FROM DUAL
UNION ALL SELECT 6, NULL, NULL, NULL, 'A' FROM DUAL
UNION ALL SELECT 7, 'B', NULL, NULL, 'A' FROM DUAL
UNION ALL SELECT 8, NULL, 'C', NULL, 'A' FROM DUAL;

Truy vấn 1 :

Nếu không có NULL các giá trị giữa các giá trị khác (nó sẽ giới thiệu nhiều dấu phẩy ở hàng 7 và 8):

SELECT col1,
       TRIM( ',' FROM col2||','||col3||','||col4||','||col5 ) AS col2
FROM   test

Kết quả :

| COL1 |    COL2 |
|------|---------|
|    1 | A,B,C,D |
|    2 |   A,B,C |
|    3 |     C,A |
|    4 |   D,A,C |
|    5 |  (null) |
|    6 |       A |
|    7 |   B,,,A |
|    8 |    C,,A |

Hai truy vấn cuối cùng sẽ hoạt động cho tất cả các ví dụ:

Truy vấn 2 :

SELECT col1,
       TRIM( ',' FROM col2 || NVL2( col3, ','||col3, NULL ) || NVL2( col4, ','||col4, NULL ) || NVL2( col5, ','||col5, NULL ) ) AS col2
FROM   test

Kết quả :

| COL1 |    COL2 |
|------|---------|
|    1 | A,B,C,D |
|    2 |   A,B,C |
|    3 |     C,A |
|    4 |   D,A,C |
|    5 |  (null) |
|    6 |       A |
|    7 |     B,A |
|    8 |     C,A |

Truy vấn 3 :

SELECT col1,
       REGEXP_REPLACE( col2||','||col3||','||col4||','||col5, '(^|,),+|,+($)', '\1' ) AS col2
FROM   test

Kết quả :

| COL1 |    COL2 |
|------|---------|
|    1 | A,B,C,D |
|    2 |   A,B,C |
|    3 |    C,A, |
|    4 |   D,A,C |
|    5 |  (null) |
|    6 |       A |
|    7 |     B,A |
|    8 |     C,A |


  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:Định dạng chuỗi kết nối tức thời là gì?

  2. Truy vấn Oracle làm nguồn trong SSIS xác định kiểu dữ liệu sai

  3. ORA-12728:phạm vi không hợp lệ trong biểu thức chính quy

  4. Làm cách nào để sao chép hoặc nhập các lược đồ Oracle giữa hai cơ sở dữ liệu khác nhau trên các máy chủ khác nhau?

  5. Spring Boot - Kết nối lại với cơ sở dữ liệu sau khi khởi động lại