Sie möchten Ihre Daten gruppieren, sodass Sie in [Aggregate Function List] (https://www.postgresql.org/docs/current/functions-aggregate.html
), in diesem Fall ist es string_agg ( value text, delimiter text ) → text
Sie möchten die Daten von Namen und Abteilungen verketten, und Sie möchten, dass die Namen und Abteilungen in separaten Zeilen stehen, wie im Beispiel gezeigt. Dafür das E'\n'
Trennzeichen sollte verwendet werden:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Die Antwort zeigt Ihnen wie es geht und die Kommentare erklären warum nicht . Sie haben jetzt die Wahl.
BEARBEITEN 1
Wenn Sie es vorziehen, die Anzahl der Datensätze beizubehalten und die ID mit der ersten Zeile der Gruppe anzuzeigen, sollten Sie sich mit Fensterfunktionen befassen. Insbesondere 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;
Die SQL vergleicht die aktuelle ID mit der der vorherigen Zeile und gibt sie oder einen Nullwert aus.