Я использую PostgreSQL 9.1 и нуждаюсь в помощи с конкатенированием нескольких строк в одном. Мне нужно сделать это в 2 таблицах. Когда я использую две функции array_agg(), я получаю дублированные значения в результате.
Таблицы:
CREATE TABLE rnp (id int, grp_id int, cabinets varchar(15) );
INSERT INTO rnp VALUES
 (1,'11','cabs1')
,(2,'11','cabs2')
,(3,'11','cabs3')
,(4,'11','cabs4')
,(5,'22','c1')
,(6,'22','c2');
CREATE TABLE ips (id int, grp_id int, address varchar(15));
INSERT INTO ips VALUES
 (1,'11','NY')
,(2,'11','CA')
,(3,'22','DC')
,(4,'22','LA');
SQL:
SELECT DISTINCT
  rnp.grp_id,
  array_to_string(array_agg(rnp.cabinets)OVER (PARTITION BY rnp.grp_id), ',') AS cabinets,
  array_to_string(array_agg(ips.address) OVER (PARTITION BY ips.grp_id), ',') AS addresses
FROM rnp JOIN ips ON rnp.grp_id=ips.grp_id
Результат:
GRP_ID  CABINETS                                             ADDRESSES
11  cabs1,cabs1,cabs2,cabs2,cabs3,cabs3,cabs4,cabs4     NY,CA,NY,CA,NY,CA,NY,CA
22  c1,c1,c2,c2                                             DC,LA,DC,LA
И мне нужно:
 GRP_ID     CABINETS                 ADDRESSES
    11  cabs1,cabs2,cabs3,cabs4       NY,CA,
    22  c1,c2                         DC,LA
Этот пример в SQLFiddle: http://sqlfiddle.com/#!1/4815e/19
Нет проблем при использовании одной таблицы - SQLFiddle: http://sqlfiddle.com/#!1/4815e/20
Что мне не хватает? Возможно ли это сделать из-за JOIN?