Đối với những người phải giải quyết vấn đề này bằng cách sử dụng Oracle 9i (hoặc sớm hơn), có lẽ bạn sẽ cần sử dụng SYS_CONNECT_BY_PATH, vì LISTAGG không khả dụng.
Để trả lời OP, truy vấn sau đây sẽ hiển thị PID từ Bảng A và nối tất cả các cột DESC từ Bảng B:
SELECT pid, SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY pid ORDER BY pid, seq) rnum, pid, description
FROM (
SELECT a.pid, seq, description
FROM table_a a, table_b b
WHERE a.pid = b.pid(+)
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR pid = pid
GROUP BY pid
ORDER BY pid;
Cũng có thể có các trường hợp trong đó tất cả các khóa và giá trị được chứa trong một bảng. Có thể sử dụng truy vấn sau đây khi không có Bảng A và chỉ có Bảng B tồn tại:
SELECT pid, SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY pid ORDER BY pid, seq) rnum, pid, description
FROM (
SELECT pid, seq, description
FROM table_b
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR pid = pid
GROUP BY pid
ORDER BY pid;
Tất cả các giá trị có thể được sắp xếp lại theo ý muốn. Các mô tả được nối riêng lẻ có thể được sắp xếp lại trong mệnh đề PHẦN TỪ B BYNG và danh sách các PID có thể được sắp xếp lại trong mệnh đề ORDER BY cuối cùng.
Luân phiên: có thể đôi khi bạn muốn nối tất cả các giá trị từ toàn bộ một bảng thành một hàng.
Ý tưởng chính ở đây là sử dụng một giá trị nhân tạo cho nhóm mô tả được nối.
Trong truy vấn sau, chuỗi hằng số '1' được sử dụng, nhưng mọi giá trị sẽ hoạt động:
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY unique_id ORDER BY pid, seq) rnum, description
FROM (
SELECT '1' unique_id, b.pid, b.seq, b.description
FROM table_b b
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1;
Các mô tả được nối riêng lẻ có thể được sắp xếp lại trong mệnh đề PHẦN THAM GIA.
Một số câu trả lời khác trên trang này cũng đã đề cập đến tài liệu tham khảo cực kỳ hữu ích này:
https://oracle-base.com/articles/misc/opes-aggregation-t kỹ thuật