在过去的一天左右,我已经对此进行了大量的背景阅读,并且我对如何实现这一点并不了解。
我查看了这个网站并找到了将多行连接成一列的方法,但是我想要的是更多定制,请帮助...
我有两个表 - 一个是人员列表和有关他们的详细信息,例如姓名等和人员参考。
第二个包含一些关于一个人的警报,一个人可以有多个警报。这将包含一个人参考和他们在字符串中的警报类型。
我想在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'
)
答案 0 :(得分:0)
我在这里发现了解决方案:
这引用了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;