2014-10-29 20 views
7

Có ai biết nếu Firebird 2.5 có chức năng tương tự như hàm "STUFF" trong SQL? Tôi có một bảng chứa hồ sơ người dùng dành cho cha mẹ và một bảng khác chứa hồ sơ người dùng con liên quan đến phụ huynh. Tôi muốn có thể kéo một chuỗi phân tách bằng dấu phẩy của "ROLES" mà người dùng có mà không cần phải sử dụng truy vấn thứ hai, lặp lại các giá trị được trả lại cho ID đã cho và tự tạo chuỗi.Firebird 2.5 - Chức năng tương đương với STUFF trong SQL (GROUP_CONCAT trong MySql/LISTAGG Trong Oracle)

Tôi đã tìm kiếm bất kỳ câu hỏi nào khác có liên quan nhưng chưa tìm thấy bất kỳ câu hỏi nào. Câu hỏi trong liên kết này string equivalent of Sum to concatenate về cơ bản là những gì tôi muốn làm, nhưng với cơ sở dữ liệu Firebird 2.5.

Trả lời

10

Dường như bạn là người may mắn - Firebird 2.1 có LIST() aggregate function mà hoạt động như GROUP_CONCAT trong MySql, cho phép một truy vấn như vậy:

SELECT p.Name, LIST(c.Name, ', ') 
FROM parent p INNER JOIN child c on c.parentid = p.parentid 
GROUP by p.Name; 

Chỉnh sửa, tái đặt hàng

Bạn có thể có thể ảnh hưởng đến thứ tự bằng cách đặt trước dữ liệu trong bảng có nguồn gốc, trước khi áp dụng hàm tổng hợp LIST, như sau:

SELECT x.ParentName, LIST(x.ChildName, ', ') 
FROM 
(
    SELECT p.Name as ParentName, c.Name as ChildName 
    FROM parent p INNER JOIN child c on c.parentid = p.parentid 
    ORDER BY c.Name DESC 
) x 
GROUP by x.ParentName; 
+1

AWESOME !!!! Cảm ơn bạn rất nhiều StuartLC Tôi đã không nhận thức được chức năng này. Làm việc hoàn hảo! Sẽ chấp nhận câu trả lời chính xác ngay khi nó cho phép tôi. – Phil

+0

Điều gì về đặt hàng? Giả sử tôi cần tên của cha mẹ và con cái theo thứ tự bảng chữ cái, nếu tôi thêm "ORDER BY p.Name, c.Name), tôi nhận được lỗi này:" Biểu thức không hợp lệ trong mệnh đề ORDER BY (không chứa trong hàm tổng hợp hoặc mệnh đề GROUP BY) "do sự hiện diện của c.Name theo thứ tự theo mệnh đề. Có cách nào để giải quyết vấn đề này không? – Bozzy

+1

@Bozzy bạn có thể ảnh hưởng đến thứ tự bằng cách thực hiện đặt trước chiếu trong bảng có nguồn gốc Tôi đã cập nhật câu trả lời. – StuartLC

Các vấn đề liên quan