【问题标题】:Multiple duplicate rows with only one column that is different. How do I combine those columns into the same row?多个重复行,只有一列不同。如何将这些列合并到同一行中?
【发布时间】:2019-06-19 17:34:22
【问题描述】:

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

我尝试选择不同的东西和其他东西,但我对 sql 很陌生

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

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

预期结果是一行,两个所有者在一列中

【问题讨论】:

  • 分享样本数据和预期输出

标签: sql postgresql


【解决方案1】:

您应该能够使用 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

您必须在 group by 子句中包含 u.name 列。

【讨论】:

    【解决方案2】:

    您可以轻松地将所有数据插入临时表#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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多