2016-11-08 71 views
0

我在过去一天左右的时间里对此进行了大量的背景阅读,我对如何实现这一点并不知情。将每个列值连接到子查询的字符串

我已经看过这个网站,发现串联多行成一列但是我后有点多定制的,请帮助的方式...

我有两个表 - 一个是一个列表的人和他们的细节,如名称等和一个人的参考。

第二个包含许多关于某个人的警报,一个人可以有多个警报。这将包含一个人参考和他们在一个字符串中的警报类型。

我想加入这两个表使用人参考的内部联接。 我接下来想要查找每个人的所有警报,并将其连接成一个字符串,并将其显示为“所有警报”列。

所以我将结束与以下的输出:

First Name | Surname | All Alerts 
-----------+---------+--------------------------  
Tony  | Stark | Alert 1, Alert 2, Alert 3 

我能得到尽可能通过所有的警报表警报的打算,把警报每个人变成了一个字符串,很明显,我每个人都需要一个连接的价值,并没有想出如何做到这一点。

我已经花了一天时间了解了这一点,并研究了XMLPath解决方案并使用CTE,CROSS APPLY和子查询来指定where子句。我有点失落。

DECLARE @ConcatenatedVals VARCHAR (255) 

SET @ConcatenatedVals = 
    (
     DECLARE @AllAlerts VARCHAR(8000) 

     SELECT @AllAlerts = COALESCE(@AllAlerts + ', ', '') + personAlert 
     FROM Alerts 

     SELECT @AllAlerts AS 'All Alerts' 
    ) 

回答

0

我发现这个解决方案张贴在这里:

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/#Toc205129480

这亚当Machanic引用的解决方案

此外,东西实际上是一个功能,以前没有见过这样的:

SELECT p1.CategoryId, stuff((SELECT','+ ProductName FROM Northwind.dbo.Products p2 WHERE p2.CategoryId = p1.CategoryId ORDER BY ProductName FOR XML PATH(''),TYPE).value('。','varchar(max)') ,1,1, '') AS Products FROM Northwind.dbo.Products p1 GROUP BY CategoryId;