Vuoi raggruppare i tuoi dati, quindi il posto dove cercare è in [elenco di funzioni aggregate] (https://www.postgresql.org/docs/current/functions-aggregate.html
), in questo caso è string_agg ( value text, delimiter text ) → text
Si desidera concatenare i dati di nomi e reparti e si desidera che i nomi e i reparti siano in righe separate, come mostrato nell'esempio. Per questo il E'\n'
è necessario utilizzare il delimitatore:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
La risposta ti mostra come e i commenti spiegano perché non farlo . Adesso la scelta è tua.
MODIFICA 1
Se preferisci preservare il numero di record e visualizzare l'ID con la prima riga del gruppo, dovresti esaminare le funzioni della finestra. In particolare GAL .
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;
Il sql confronta l'id corrente con quello della riga precedente e lo restituisce o il valore null.