Sql Postgres以字符串形式返回多个行-列值

Sql Postgres以字符串形式返回多个行-列值,sql,postgresql,Sql,Postgresql,我有一个名为servers的表,其中包含列server和site,如下所示: table servers: server site servern1 .biz.net servern2 .biz.net servern3 .biz.net 我试图在一行中获得一个字符串输出,如下所示 servern1.biz.net:servern1;servern2.biz.net:servern2;servern3.biz.net:servern3 select string

我有一个名为servers的表,其中包含列server和site,如下所示:

table servers:
server       site
servern1    .biz.net
servern2    .biz.net
servern3    .biz.net
我试图在一行中获得一个字符串输出,如下所示

servern1.biz.net:servern1;servern2.biz.net:servern2;servern3.biz.net:servern3
select string_agg(concat_ws('', server, site,':',server), ';') as vals from servers;

                                  vals                                   
-------------------------------------------------------------------------
servern1.biz.net:servern1;servern2.biz.net:servern2;servern3.biz.net:servern3
(1 row)

并没有我下面的尝试所显示的那么幸运

postgres=# select array_to_string(array_agg(server),':')||site||':'||server as vals from servers group by server,site;

          vals           
-------------------------
 servern2.biz.com:servern2
 servern3.biz.com:servern3
 servern1.biz.com:servern1
(3 rows)
感谢您的帮助/建议!
谢谢

以下几点可以做到:

select string_agg(server||':'||site, ';') as vals
from servers;
如果任一列可以为空或null,则concat_ws可能是更好的选择:

select string_agg(concat_ws(':', server, site), ';') as vals
from servers;

那是王牌,谢谢你,一匹没有名字的马

我刚刚调整了一点以获得如下所示的预期结果

servern1.biz.net:servern1;servern2.biz.net:servern2;servern3.biz.net:servern3
select string_agg(concat_ws('', server, site,':',server), ';') as vals from servers;

                                  vals                                   
-------------------------------------------------------------------------
servern1.biz.net:servern1;servern2.biz.net:servern2;servern3.biz.net:servern3
(1 row)