PostgreSQL视图:将记录展平为列

时间:2010-12-08 10:50:40

标签: sql postgresql

我想创建一个视图,显示有关系统用户的有趣内容。除此之外,我的数据库有这个表,每个用户有几行,基本上从0到3行。每个这样的行都有一个名为“name”的字符串字段,我希望我的视图包含所有这些以逗号分隔的字符。例如:

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

有没有办法从另一个表中选择这个列?我正在使用PostgreSQL,但这是一个普遍的SQL问题。

2 个答案:

答案 0 :(得分:2)

见这里:

How to concatenate strings of a string field in a PostgreSQL 'group by' query?

您应该定义一个新的聚合函数。确切的函​​数取决于您的表结构,但这里是an example from the PostgreSQL forums

  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;

答案 1 :(得分:0)

您可以使用某种字符串连接聚合,例如:

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

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

但如果要在聚合中使用order by子句,则需要9.0