如何连接每个组的某一列中的所有字符串
假设我有这个表 [Table1]
Name Mark
------- ------
ABC 10
DEF 10
GHI 10
JKL 20
MNO 20
PQR 30
我的 SQL 语句应该是什么来检索如下所示的记录: (按[标记]分组)。 我已经完成了第 1 列和第 2 列,但不知道如何完成第三列(将 [名称] 与相同的 [标记] 连接)
mark count names
---- ----- -----------
10 3 ABC,DEF,GHI
20 2 JKL,MNO
30 1 PQR
我正在使用 Microsoft SQL。 请帮忙。谢谢
Suppose I have this table [Table1]
Name Mark
------- ------
ABC 10
DEF 10
GHI 10
JKL 20
MNO 20
PQR 30
What should be my SQL statement to retrieve a record that looks like this:
(group by [mark]).
I have done the 1 and 2 columns but don't know how to accomplish the third column (concat the [name] with the same [mark])
mark count names
---- ----- -----------
10 3 ABC,DEF,GHI
20 2 JKL,MNO
30 1 PQR
I'm using Microsoft SQL.
Please help. Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果是 MS SQL 2005 或更高版本。
输出:
If MS SQL 2005 or higher.
Output:
这是与性能相关的答案!
http://jerrytech.blogspot.com /2010/04/tsql-concatenate-strings-1-2-3-and.html
在大型查询中使用 XML 函数会降低性能。
使用 CTE 是性能超级巨星。
查看链接,它会解释如何操作。
我承认要完成它需要做更多的工作。
但结果是数百万行的毫秒数。
Here's a performance-related answer!
http://jerrytech.blogspot.com/2010/04/tsql-concatenate-strings-1-2-3-and.html
Using XML functions in a large query is a performance killer.
Using a CTE is a performance superstar.
Check out the link, it will explain how.
I admit the work to accomplish it is more.
But the result is milliseconds over millions of rows.
Polishchuks 解决方案更优雅,但这基本上是同一件事,我们只是以不同的方式处理尾随逗号。
polishchuks solution is more elegant, but this is basically the same thing, we just deal with the trailing comma differently.
大致基于 Itzik Ben-Gan,Inside Microsoft SQL Server 2005:T-SQL 编程,第 14 页。 215:
Loosely based on Itzik Ben-Gan, Inside Microsoft SQL Server 2005: T-SQL Programming, p. 215: