Anda ingin mengelompokkan data Anda, jadi tempat yang harus dicari adalah di [daftar fungsi agregat] (https://www.postgresql.org/docs/current/functions-aggregate.html
), dalam hal ini adalah string_agg ( value text, delimiter text ) → text
Anda ingin menggabungkan data dari nama dan departemen dan Anda ingin nama dan departemen berada di baris terpisah seperti yang diperlihatkan dalam contoh. Untuk itu E'\n'
pembatas harus digunakan:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Jawabannya menunjukkan kepada Anda bagaimana dan komentar menjelaskan mengapa tidak . Pilihan ada di tangan Anda sekarang.
EDIT 1
Jika Anda lebih suka mempertahankan jumlah catatan dan menampilkan ID dengan baris pertama grup, maka Anda harus melihat ke fungsi jendela. Khususnya 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 membandingkan id saat ini dengan salah satu baris sebelumnya dan menampilkannya atau nilai nol.