【问题标题】:Concatenate each column value into a string for a subquery将每个列值连接成子查询的字符串
【发布时间】:2016-11-08 10:56:09
【问题描述】:

在过去一天左右的时间里,我断断续续地阅读了很多背景资料,但我对如何实现这一点并不明智。

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

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

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

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

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

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

【问题讨论】:

    标签: string subquery concatenation coalesce


    【解决方案1】:

    我在这里找到了解决方案:

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

    这引用了 Adam Machanic 的解决方案

    另外,东西其实是一个函数,以前没见过这个:

    选择 p1.CategoryId, 东西((选择','+产品名称 FROM Northwind.dbo.Products p2 其中 p2.CategoryId = p1.CategoryId 按产品名称订购 FOR XML PATH(''), TYPE).value('.', 'varchar(max)') ,1,1,'') AS产品 FROM Northwind.dbo.Products p1 按类别 ID 分组;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      相关资源
      最近更新 更多