2014-07-03 78 views
2

我有以下數據庫:如何從行中獲取數據並將其放入單個字段?

paperid | authorid |  name  |         affiliation         
---------+----------+------------------+--------------------------------------------------------------------------------- 
    487792 | 1487835 | Mark A. Magnuson | Vanderbilt University 
    487792 | 1814994 | Miriam Magnuson | Department of Education and Psychology, Linköping University, Linköping, Sweden 
    487792 | 2248713 | Leif Hergils  | Department of Audiology, University Hospital, Linköping, Sweden 

我想作這樣的事情出來的:

paperid |     name         | 
---------+---------------------------------------------------------+ 
    487792 | Mark A. Magnuson Miriam Magnuson Leif Hergils 

通過將所有作者的名字在列/場。

我怎樣才能用SQL來做到這一點?

編輯

我曾嘗試:

select paperid, concat(name) as authors FROM newpaperauthor GROUP BY paperid, name ORDER BY paperid; 

但是,這將單獨列出作者:

paperid |   authors   
---------+---------------------------- 
    896450 | Bart Dhoedt 
    896450 | Marc De Leenheer 

回答

4
select paperid, string_agg(name, ' ') as authors 
FROM newpaperauthor 
GROUP BY paperid 
ORDER BY paperid; 

string_agg通過聚集列做字符串連接:

http://www.postgresql.org/docs/current/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE

concat確實提供的參數的字符串連接:

http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-OTHER

+0

你能解釋'string_agg(name,'')'和'concat(name)'之間的區別嗎? – Patryk

+0

@Patryk更新 –

0

concat(x,y)膠在一起的兩個標量值(例如同一行中的兩列值)。 string_agg(name,sep)將一個聚合組中的列name的值粘合在一起。由於不能保證在該組內排序,因此請注意空格;並檢出SQL-2003級別的聚合,例如PARTITION,您可以在其中指定訂單。

相關問題