U wilt uw gegevens groeperen, dus de plaats om te zoeken is in [aggregate function list] (https://www.postgresql.org/docs/current/functions-aggregate.html
), in dit geval is het string_agg ( value text, delimiter text ) → text
U wilt de gegevens van namen en afdelingen samenvoegen en u wilt dat de namen en afdelingen in aparte regels staan, zoals in het voorbeeld. Daarvoor de E'\n'
scheidingsteken moet worden gebruikt:
SELECT
id,
string_agg(name, E'\n') as names,
string_agg(dept, E'\n') as depts
FROM
data
GROUP BY
id
ORDER BY
id;
Het antwoord laat je zien hoe je en de opmerkingen leggen uit waarom niet . De keuze is nu aan jou.
BEWERK 1
Als u liever het aantal records wilt behouden en de ID met de eerste rij van de groep wilt weergeven, moet u kijken naar vensterfuncties. In het bijzonder 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;
De sql vergelijkt de huidige id met die van de vorige rij en geeft deze of een null-waarde uit.