Искате да групирате вашите данни, така че мястото, където да търсите, е в [списък с агрегатни функции] (https://www.postgresql.org/docs/current/functions-aggregate.html
), в този случай това е string_agg ( value text, delimiter text ) → text
Искате да свържете данните от имена и отдели и искате имената и отделите да са в отделни редове, както е показано в примера. За това E'\n'
трябва да се използва разделител:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Отговорът ви показва как и коментарите обясняват защо не . Сега изборът е ваш.
РЕДАКТИРАНЕ 1
Ако предпочитате да запазите броя на записите и да показвате ID с първия ред на групата, тогава трябва да разгледате функциите на прозореца. По-конкретно 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 сравнява текущия идентификатор с този от предишния ред и го извежда или нулева стойност.