Chcesz pogrupować swoje dane, więc miejsce do wyszukania znajduje się w [lista funkcji agregacji] (https://www.postgresql.org/docs/current/functions-aggregate.html
), w tym przypadku jest to string_agg ( value text, delimiter text ) → text
Chcesz połączyć dane z nazw i działów i chcesz, aby nazwy i działy znajdowały się w osobnych wierszach, jak pokazano w przykładzie. W tym celu E'\n'
należy użyć separatora:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Odpowiedź pokazuje, jak a komentarze wyjaśniają, dlaczego nie . Wybór należy teraz do Ciebie.
EDYTUJ 1
Jeśli wolisz zachować liczbę rekordów i wyświetlać identyfikator w pierwszym wierszu grupy, powinieneś zajrzeć do funkcji okna. W szczególności 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 porównuje bieżący identyfikator z identyfikatorem z poprzedniego wiersza i wyświetla go lub wartość pustą.