У меня есть 2 таблицы, таблица anggota и pengurus, где таблицы объединены, где например одно и то же имя с разными jabatan, то jabatan объединены в одну строку
член таблицы:
+----+-------+------+--------+--------+
| id | nama | nik | no_kta | alamat |
+----+-------+------+--------+--------+
| 4 | abas | 0001 | 0021 | a |
| 5 | panji | 0002 | 0022 | b |
| 6 | doni | 0003 | 0023 | c |
+----+-------+------+--------+--------+
администратор таблицы:
+----+-------------+-----------+
| id | id_anggota | jabatan |
+----+-------------+-----------+
| 1 | 4 | ketua |
| 2 | 6 | bendahara |
| 3 | 6 | sekretaris|
+----+-------------+-----------+
postgresql: выберите a.nama, a.nik, a.no_kta, a.address, p.jabatan из члена, администратор левого соединения p на a.id = p.id_member, где a.id_party = 4
+-------+------+--------+--------+------------+
| nama | nik | no_kta | alamat | jabatan |
+-------+------+--------+--------+------------+
| abas | 0001 | 0021 | a | ketua |
| doni | 0003 | 0023 | c | bendahara |
| doni | 0003 | 0023 | c | sekretaris |
| panji | 0002 | 0022 | b | null |
+-------+------+--------+--------+------------+
Я хочу, чтобы данные вышли так:
+-------+------+--------+--------+-----------------------+
| nama | nik | no_kta | alamat | jabatan |
+-------+------+--------+--------+-----------------------+
| abas | 0001 | 0021 | a | ketua |
| doni | 0003 | 0023 | c | bendahara, sekretaris |
| panji | 0002 | 0022 | b | null |
+-------+------+--------+--------+-----------------------+
Решение проблемы
использовать string_aggследующим образом
SELECT nama,
nik,
no_kta,
alamat,
String_agg(jabatan, ',') AS jabatan
FROM anggota a
FULL JOIN pengurus p
ON a.id = p.id_anggota
GROUP BY nama,
nik,
no_kta,
alamat
или с помощьюsubquery
SELECT nama,
nik,
no_kta,
alamat,
jabatan
FROM (
SELECT id_anggota,
string_agg(jabatan,',') AS jabatan
FROM pengurus
GROUP BY id_anggota ) P
FULL JOIN anggota a
ON a.id=p.id_anggota
Комментариев нет:
Отправить комментарий