Du vill gruppera dina data, så platsen att leta är i [sammanställd funktionslista] (https://www.postgresql.org/docs/current/functions-aggregate.html
), i det här fallet är det string_agg ( value text, delimiter text ) → text
Du vill sammanfoga data från namn och avdelningar och du vill att namnen och avdelningarna ska vara på separata rader som visas i exemplet. För det E'\n'
avgränsare ska användas:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Svaret visar dig hur du gör och kommentarerna förklarar varför inte . Valet är ditt nu.
REDIGERA 1
Om du föredrar att bevara antalet poster och visa ID med den första raden i gruppen, bör du titta på fönsterfunktioner. Närmare bestämt 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 jämför nuvarande id med det i föregående rad och matar ut det eller nollvärdet.