Bạn muốn nhóm dữ liệu của mình, vì vậy nơi cần tìm là trong [danh sách hàm tổng hợp] ( https://www.postgresql.org/docs/current/functions-aggregate.html
), trong trường hợp này nó là string_agg ( value text, delimiter text ) → text
Bạn muốn nối dữ liệu từ tên và phòng ban và bạn muốn tên và phòng ban nằm trong các dòng riêng biệt như trong ví dụ. Đối với điều đó, E'\n'
dấu phân cách nên được sử dụng:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Câu trả lời chỉ cho bạn cách thực hiện và các nhận xét giải thích tại sao không nên . Sự lựa chọn là của bạn bây giờ.
CHỈNH SỬA 1
Nếu bạn muốn duy trì số lượng bản ghi và hiển thị ID với hàng đầu tiên của nhóm, thì bạn nên xem xét các hàm cửa sổ. Cụ thể là LAG .
SELECT
CASE
WHEN id IS DISTINCT FROM LAG(id) OVER(order by id) THEN id
ELSE null
END as id,
name,
dept
FROM
data
order by
data.id;
Sql so sánh id hiện tại với một trong những hàng trước đó và xuất ra nó hoặc giá trị null.