Представления PostgreSQL: выравнивание записей в столбце - PullRequest
0 голосов
/ 08 декабря 2010

Я хочу создать представление, которое будет отображать интересные сведения о пользователях системы.Помимо прочего, в моей БД есть эта таблица, которая имеет несколько строк на пользователя, в основном от 0 до 3 строк.У каждой такой строки есть строковое поле с именем «name», и я бы хотел, чтобы мое представление содержало все эти разделенные запятыми.Например:

UID   Name    Concatenation
1     John    A, C
2     Jack    B, C
3     James   
4     Jill    B

Есть ли способ выбрать из другой таблицы в этом столбце?Я использую PostgreSQL, но мне кажется, что это общий вопрос SQL.

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

Смотрите здесь:

Как объединить строки строкового поля в группе 'PostgreSQL' по запросу?

Вы должны определить новую агрегатную функцию. Точная функция зависит от структуры вашей таблицы, но вот пример с форумов PostgreSQL :

  CREATE AGGREGATE textcat_all(
      basetype    = text,
      sfunc       = textcat,
      stype       = text,
      initcond    = ''
  );

Вы можете использовать этот новый агрегат в своем запросе. Например:

  SELECT partner.name, textcat_all(phones.number || ', ')
      FROM partner LEFT JOIN phones ON partner.id = phones.partner_id
      GROUP BY partner.name;
0 голосов
/ 08 декабря 2010

Вы можете использовать какой-либо агрегат конкатенации строк, например:

create aggregate concat( basetype = text, 
                         sfunc = textcat, 
                         stype = text, 
                         initcond = '' );

select name, substring(concat(', '||value, 3) from t group by name;

но вам нужно 9.0 , если вы хотите использовать в совокупности предложение order by

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...