将每个列值连接成子查询的字符串

时间:2016-11-08 10:56:10

标签: string subquery concatenation coalesce

在过去的一天左右,我已经对此进行了大量的背景阅读,并且我对如何实现这一点并不了解。

我查看了这个网站并找到了将多行连接成一列的方法,但是我想要的是更多定制,请帮助...

我有两个表 - 一个是人员列表和有关他们的详细信息,例如姓名等和人员参考。

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

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

所以我最终得到以下输出:

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'
    )   

1 个答案:

答案 0 :(得分:0)

我在这里发现了解决方案:

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

这引用了Adam Machanic的解决方案

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

SELECT p1.CategoryId,        东西((SELECT',' + ProductName                来自Northwind.dbo.Products p2                在哪里p2.CategoryId = p1.CategoryId                按产品名称排序                FOR XML PATH(''),TYPE).value('。',' varchar(max)')             ,1,1,'')        AS产品       来自Northwind.dbo.Products p1       GROUP BY CategoryId;