如何在sql中连接具有相同id的多行?

新手上路,请多包涵

我的表包含两个字段的详细信息:

 ID      DisplayName
1        Editor
1        Reviewer
7        EIC
7        Editor
7        Reviewer
7        Editor
19       EIC
19       Editor
19       Reviewer

我想用 DisplayName 获得独特的细节,比如

1 Editor,Reviewer 7 EIC,Editor,Reviewer

不要获得 ID 7 的重复值

如何结合 DisplayName 详细信息?如何编写查询?

原文由 Luc Le 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
2 个回答

SQL-Server 中,您可以执行以下操作:

询问

SELECT id, displayname =
    STUFF((SELECT DISTINCT ', ' + displayname
           FROM #t b
           WHERE b.id = a.id
          FOR XML PATH('')), 1, 2, '')
FROM #t a
GROUP BY id

测试数据

create table #t
(
id int,
displayname nvarchar(max)
)

insert into #t values
 (1 ,'Editor')
,(1 ,'Reviewer')
,(7 ,'EIC')
,(7 ,'Editor')
,(7 ,'Reviewer')
,(7 ,'Editor')
,(19,'EIC')
,(19,'Editor')
,(19,'Reviewer')

输出

id  displayname
1   Editor, Reviewer
7   Editor, EIC, Reviewer
19  Editor, EIC, Reviewer

原文由 Stanislovas Kalašnikovas 发布,翻译遵循 CC BY-SA 4.0 许可协议

SQL Server 2017+ 和 SQL Azure:STRING_AGG

从 SQL Server 的下一个版本开始,我们终于可以跨行连接,而无需求助于任何变量或 XML 巫术。

STRING_AGG (Transact-SQL)

 SELECT ID, STRING_AGG(DisplayName, ', ') AS DisplayNames
FROM TableName
GROUP BY ID

原文由 Jayrag Pareek 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进