【问题标题】:How can I concatinate a subquery result field into the parent query?如何将子查询结果字段连接到父查询?
【发布时间】:2009-06-19 07:27:41
【问题描述】:

数据库:SQL Server 2008。

我有一个像这样的真正(假)常规查询:-

SELECT CarId, NumberPlate
    (SELECT Owner
     FROM Owners b
     WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate

这就是我想要得到的......

=> 1    ABC123     John, Jill, Jane
=> 2    XYZ123     Fred
=> 3    SOHOT      Jon Skeet, ScottGu

所以,我尝试使用

AS [Text()] ... FOR XML PATH('') 但这包括奇怪的编码字符(例如回车)。 ...所以我对此不是 100% 满意。

我也尝试查看是否有 COALESCE 解决方案,但我的所有尝试都失败了。

那么 - 有什么建议吗?

【问题讨论】:

    标签: sql-server sql-server-2008 subquery concatenation


    【解决方案1】:

    回答一个旧帖子,只是认为它需要更新 SQL Server 的新版本:

    对于 SQL Server 2017,请使用 STRING_AGG(表达式, 分隔符)

    GROUP_CONCAT 是 MySQL。

    在 SQL 2017 之前,您还可以执行以下操作(摘自我们当前基于 SQL Server 2016 的代码库):

    SELECT CarId, NumberPlate,
        (STUFF(( SELECT ', ' + b.Owner
            FROM Owners b
            WHERE b.CarId = a.CarId
            FOR XML PATH('')
            )
            ,1,2,'') AS Owners
    FROM Cars a
    ORDER BY NumberPlate
    

    指向 STRING_AGG 的链接 https://database.guide/the-sql-server-equivalent-to-group_concat/ https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017

    链接到 STUFF: https://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-2017

    最后链接到 FOR XML: https://docs.microsoft.com/en-us/sql/relational-databases/xml/for-xml-sql-server?view=sql-server-2017

    【讨论】:

      【解决方案2】:

      【讨论】:

      • Ha -> 那篇文章也以汽车为例 :) 我最终创建了一个临时 UDF,运行我的代码,删除 udf。效果很好:) 这是用于导入过程..因此创建/删除 udf。干杯:)
      【解决方案3】:

      使用GROUP_CONCAT

      SELECT CarId, NumberPlate
          (SELECT GROUP_CONCAT(Owner)
           FROM Owners b
           WHERE b.CarId = a.CarId) AS Owners
          FROM Cars a
      ORDER BY NumberPlate
      

      【讨论】:

      • GROUP_CONCAT 在 Sql Server 2008 中不存在。或任何版本,就此而言。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多