我想创建一个视图,显示有关系统用户的有趣内容。除此之外,我的数据库有这个表,每个用户有几行,基本上从0到3行。每个这样的行都有一个名为“name”的字符串字段,我希望我的视图包含所有这些以逗号分隔的字符。例如:
UID Name Concatenation
1 John A, C
2 Jack B, C
3 James
4 Jill B
有没有办法从另一个表中选择这个列?我正在使用PostgreSQL,但这是一个普遍的SQL问题。
答案 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