sal*_*ere 2 sql sql-server sql-server-2008
我正在尝试在SSMS 2008中编写一个SQL查询,以便按单列进行分组.我有一个只有两列的表:部件号和产品代码.这两列都是VARCHAR数据类型.
现在我的表看起来像:
Part Number Product Code
111222 AAAAA
111222 BBBBB
111222 CCCCC
111223 AAAAA
111224 AAAAA
111225 AAAAA
111226 DDDDD
111226 EEEEE
Run Code Online (Sandbox Code Playgroud)
但我希望这个表格看起来像:
111222 AAAAA, BBBBB, CCCCC
111223 AAAAA
111224 AAAAA
111225 AAAAA
111226 DDDDD, EEEEE
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我已经阅读了一些推荐合并功能的网站,但我似乎无法找到一种方法让它正常工作.
Cod*_*ian 11
几种方法http://web.archive.org/web/20120429052520/http://www.projectdmx.com/tsql/rowconcatenate.aspx
文章详细介绍了在这个答案中列出的太多方法,但我最喜欢的方法就是这个:
黑盒XML方法
下面详细介绍使用带有PATH模式的FOR XML子句进行字符串连接的示例.它最初由Eugene Kogan发布,后来在公共新闻组中变得普遍.
SELECT p1.CategoryId,
( SELECT ProductName + ','
FROM Northwind.dbo.Products p2
WHERE p2.CategoryId = p1.CategoryId
ORDER BY ProductName
FOR XML PATH('') ) AS Products
FROM Northwind.dbo.Products p1
GROUP BY CategoryId ;
Run Code Online (Sandbox Code Playgroud)
同样,最初在beta新闻组中找到的类似方法,使用CROSS APPLY运算符.
SELECT DISTINCT CategoryId, ProductNames
FROM Products p1
CROSS APPLY ( SELECT ProductName + ','
FROM Products p2
WHERE p2.CategoryId = p1.CategoryId
ORDER BY ProductName
FOR XML PATH('') ) D ( ProductNames )
Run Code Online (Sandbox Code Playgroud)
您可能会注意到连接字符串末尾的逗号,您可以使用STUFF,SUBSTRING或LEFT函数删除它.虽然上述方法在撰写本文时被许多人认为是可靠的,但鉴于相关子查询中的FOR XML PATH()表达式的内部工作和评估规则没有很好地记录,因此不能保证它会保持这种方式.
| 归档时间: |
|
| 查看次数: |
12007 次 |
| 最近记录: |