SQL查询:从映射表获取带有逗号分隔值的子值

时间:2018-09-22 10:16:47

标签: sql sql-server

我正在使用SQL Server2017。我有一个包含parentId和许多childId的映射表。所有ID与父表的映射。我想从映射表childId中查询,并在针对parentId的行中使用逗号分隔的值。

查询是

SELECT 
    (SELECT 
         CAST(b.ChildId as NVARCHAR(20)) + ',' 
     FROM 
         [std].[FieldMapping] b 
     WHERE 
         b.ParentId = a.FieldId) AS Childs 
FROM 
    [std].[Field] a 
WHERE 
    a.FieldId = 2080

但是我得到一个错误:

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作   表达式。

如何获得所需的结果。

1 个答案:

答案 0 :(得分:2)

尝试使用XML Path来实现。选中SQL Fiddle

SELECT a.name,
    (SELECT 
         CAST(b.name as NVARCHAR(20)) + ',' 
     FROM 
         child b 
     WHERE 
         b.Parent_Id = a.id
    FOR XML PATH('')) AS Childs 
FROM 
    parent a 
WHERE 
    a.id = 1