2010-12-08 58 views
0

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

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

有没有一种方法可以从另一个表中选择此列?我使用的是PostgreSQL,但是这让我觉得这是一个普通的SQL问题。

+0

什么是输入表? – 2010-12-08 11:05:53

回答

1

在这里看到:

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; 
0

你可以使用某种类型的字符串连接骨料例如:

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子句中的总