我正在创建一个包含具有多个用户的“所有者”列的表,当我创建该表时,具有多个所有者的任何内容将是两行或更多行。我正在尝试将一列的所有者用逗号分隔,而不要放在不同的行中
我试图选择不同的东西,但是我对sql很新
'''select distinct s.id id, p.name project, u.name owners, s.story_type, s.name, e.name epic, s.loaded_at'''
实际结果是两行,每个值都完全相同,除了拥有者列具有两个不同的值
预期结果将是一行,两个所有者都在同一列
答案 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;