逗号分隔的值与表中的所有行

问题描述:

我有一个包含三列的服务表。逗号分隔的值与表中的所有行

服务

sr_id lang alias 
1  EN A 
1  PA B 
1  HI C 
2  EN D 
2  HI E 

现在,我想每个服务ID输出,郎和别名列将别名级联的服务。

样本输出 -

SR_ID lang alias 
1  EN  A,B,C 
1  PA  A,B,C 
1  HI  A,B,C 
2  EN  D,E 
2  HI  D,E 

我如何能做到这一点在PostgreSQL 9.4?

试图用相同的样本数据创建类似的条件。请检查下面的查询

select a.sr_id , a.lang, b.ALIAS from 
SERVICES a , 
(
select sr_id , string_agg(ALIAS::text,',') ALIAS 
from SERVICES 
group by sr_id) b 
where a.sr_id = b.sr_id; 
+3

这将是更好的使用明确的JOIN而不是老式(1992年以前的老式)隐式联接:'... FROM服务A JOIN(SELECT ...)B ON A.Sr_ID = B.Sr_ID ...'。 –

+0

谢谢,您的建议。会保重。 – Tajinder

如果您不需要它们排序,你可以使用:

select sr_id, lang, string_agg(alias, ',') over() as alias 
from services 
order by sr_id; 

否则,你需要:

select s.sr_id, s.lang, t.alias 
from services s 
join (
    select sr_id, string_agg(alias, ',' order by alias) as alias 
    from services 
    group by sr_id 
) t on t.sr_id = s.sr_id 
order by s.sr_id; 
+0

您可以将内部子查询放入CTE以提高可读性/性能,但无论如何为+1 –

+0

@TimBiegeleisen:将查询组放入CTE不会对性能产生任何影响 –