sql显示1行中的所有名称(1个字符串)

时间:2014-04-02 12:11:55

标签: select postgresql-8.4

ad_org表格列id& name

ad_org

            ad_org_id             |   name    
----------------------------------+-----------

 357947E87C284935AD1D783CF6F099A1 | Spain

 43D590B4814049C6B85C6545E8264E37 | Main

 5EFF95EB540740A3B10510D9814EFAD5 | USA

 2878085215E54C73A04D394BFD170733 | India

 22669845D93A49A98932CE29AE02E0FD | Honkong

如何从上面的数据库

以这种方式输出所有名称(以1个字符串形式)

Spain | Main | USA | India | Honkong

在1个选择语句中。

3 个答案:

答案 0 :(得分:2)

使用string_agg

SELECT string_agg("name", ' | ') FROM thetable;

对于较旧的PostgreSQL,您必须使用array_aggarray_to_string

SELECT array_to_string( array_agg("name"), ' | ') FROM thetable;

如果您想要特定订单,请将其放在汇总中,例如按字母顺序排列:

SELECT string_agg("name", ' | ' ORDER BY "name") FROM thetable;

答案 1 :(得分:0)

使用下面的代码

DECLARE @cols AS NVARCHAR(MAX),     @query AS NVARCHAR(MAX)

选择@cols = STUFF((SELECT','+ QUOTENAME(ColumnName)                     来自你的                     按ColumnName,id分组                     按ID排序             FOR XML PATH(''),TYPE             ).value('。','NVARCHAR(MAX)')         ,1,1, '')

设置@query ='SELECT'+ @cols +'              (                 选择值ColumnName                 来自你的             ) X             枢             (                 MAX(值)                 for ColumnName in('+ @cols +')             )p'

执行(@query)

Click here for Demo

答案 2 :(得分:0)

通过搜索得到它。

Equivalent to PostgreSQL array() / array_to_string() functions in Oracle 9i

select array_to_string(array(select name from ad_org), '|') as names;