Du vil gruppere dine data, så stedet at kigge på er i [sammenlagt funktionsliste] (https://www.postgresql.org/docs/current/functions-aggregate.html
), i dette tilfælde er det string_agg ( value text, delimiter text ) → text
Du vil sammenkæde dataene fra navne og afdelinger, og du ønsker at navne og afdelinger skal være i separate linjer som vist i eksemplet. Til det er E'\n'
afgrænser skal bruges:
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 viser dig hvordan og kommentarerne forklarer hvorfor ikke . Valget er dit nu.
REDIGER 1
Hvis du foretrækker at bevare antallet af poster og vise ID'et med den første række af gruppen, så bør du se på vinduesfunktioner. Specifikt 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 sammenligner det aktuelle id med det i den foregående række og udsender det eller null-værdien.