多个重复的行,只有一列是不同的。如何将这些列合并到同一行?

时间:2019-06-19 17:34:22

标签: sql postgresql

我正在创建一个包含具有多个用户的“所有者”列的表,当我创建该表时,具有多个所有者的任何内容将是两行或更多行。我正在尝试将一列的所有者用逗号分隔,而不要放在不同的行中

我试图选择不同的东西,但是我对sql很新

'''select distinct s.id id, p.name project, u.name owners, s.story_type, s.name, e.name epic, s.loaded_at'''

实际结果是两行,每个值都完全相同,除了拥有者列具有两个不同的值

预期结果将是一行,两个所有者都在同一列

2 个答案:

答案 0 :(得分:0)

您应该可以使用 string_agg 函数(自9.0起,这是所有Postgresql版本的功能)将多行转换为逗号分隔的字符串:

SELECT  
  s.id id, p.name project, 
  STRING_AGG(u.name, ',') owners, 
  s.story_type, s.name, e.name epic, s.loaded_at  
FROM <...> -- replace with actual FROM and JOIN clauses
JOIN <...>
GROUP BY s.id, p.name, s.story_type, s.name, e.name, s.loaded_at

您必须在分组依据子句中包含u.name列。

答案 1 :(得分:0)

您可以轻松地将所有数据插入临时表#yourtable中。 然后,您可以使用“ FOR XML PATH”将多个行连接在一起:

select distinct project_name,
  STUFF((SELECT distinct ', ' + owner_name
     from #yourtable p1
     where p.[project_name] = p1.[project_name]
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,2,'') owners
from #yourtable p;