データをグループ化したいので、調べる場所は[集計関数リスト]( 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は、現在のIDを前の行のIDと比較し、それまたはnull値を出力します。