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

Cách nối nhiều hàng theo thứ tự trong Oracle10g

Không bao giờ sử dụng WM_CONCAT . Đọc Tại sao không sử dụng hàm WM_CONCAT trong Oracle?

Xem chủ đề này https://stackoverflow.com/a/28758117/3989608 .

Nó không có giấy tờ và bất kỳ ứng dụng nào dựa trên WM_CONCAT sẽ không hoạt động sau khi được nâng cấp lên 12c vì nó đã bị xóa khỏi phiên bản 12c mới nhất.

Có nhiều cách để thực hiện tổng hợp chuỗi , tùy thuộc vào phiên bản cơ sở dữ liệu . Xem một vài ví dụ dưới đây:

11gR2

Sử dụng LIASTAGG :

SQL> SELECT grp,
  2    listagg(command, ',') WITHIN GROUP(
  3  ORDER BY seq) command
  4  FROM t
  5  GROUP BY grp;

GRP COMMAND
--- --------------------------------------------------------------------------------------------
ONE <?xml version=1.0 encoding=UTF-8?>,<message1>MESSAGE</message1>,<message2>MESSAGE</message2>
TWO <?xml version=1.0 encoding=UTF-8?>,<message2>MESSAGE</message2>,<message9>MESSAGE</message9>

SQL>

9i trở lên

Sử dụng ROW_NUMBER()SYS_CONNECT_BY_PATH :

SQL> SELECT grp,
  2         LTRIM(MAX(SYS_CONNECT_BY_PATH(command,','))
  3         KEEP (DENSE_RANK LAST ORDER BY seq),',') command
  4  FROM   (SELECT grp,
  5                 command,
  6                 seq,
  7                 ROW_NUMBER() OVER (PARTITION BY grp ORDER BY seq) AS curr,
  8                 ROW_NUMBER() OVER (PARTITION BY grp ORDER BY seq) -1 AS prev
  9          FROM   t)
 10  GROUP BY grp
 11  CONNECT BY prev = PRIOR curr AND grp = PRIOR grp
 12  START WITH curr = 1;

GRP COMMAND
--- --------------------------------------------------------------------------------------------
ONE <?xml version=1.0 encoding=UTF-8?>,<message1>MESSAGE</message1>,<message2>MESSAGE</message2>
TWO <?xml version=1.0 encoding=UTF-8?>,<message2>MESSAGE</message2>,<message9>MESSAGE</message9>

SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng hợp dữ liệu bằng các hàm nhóm (nhóm theo oracle)

  2. đếm số hàng xảy ra cho mỗi ngày trong phạm vi ngày của cột

  3. Oracle:'=ANY ()' so với 'IN ()'

  4. Làm cách nào để trả về tập kết quả / con trỏ từ khối ẩn danh Oracle PL / SQL thực thi SQL động?

  5. Cách lấy câu lệnh SQL được thực thi cuối cùng và liên kết các giá trị biến trong oracle