如何将STRING_AGG转换为stuff函数以在SQL Server 2016上工作查询如下?[duplicate]

epggiuax  于 2023-01-04  发布在  SQL Server
关注(0)|答案(1)|浏览(212)
    • 此问题在此处已有答案**:

String_agg for SQL Server before 2017(2个答案)
昨天关门了。
我有以下SQL查询,这是不工作的SQL Server 2016及以下版本

SELECT
    (
        SELECT STRING_AGG(d.Name, ',') AS divnames 
        FROM (
            SELECT div.name, MHLId 
            FROM MsrtProfile mp 
            INNER JOIN Division div ON mp.DivisionId = div.Id 
            WHERE mp.mhlid = ph.potentialHospitalNo  
            GROUP BY div.Name, MHLId
        ) d
    ) AS divisionnames
FROM xyz ph

示例我的输出如下所示

div1,div2,div3

我需要与逗号值的单列行。
我有两个表如下-第一个表名是Hospital

hospitalId   name
-----------------
1            a1
2            a2

第二个表名为division

id  DivisionName    hospitalId
------------------------------
1     d1             1
2     d2             1
3     d3             2

我需要一个如下输出,通过hospitalid连接第一个和第二个表

DivisionName
-------------
d1,d2
d3
r1wp621o

r1wp621o1#

使用STRING_AGGGROUP BY似乎是一个非常直接的查询:

SELECT 
    h.HospitalId, h.Name,
    STRING_AGG(d.DivisionName, ',') AS DivisonName
FROM 
    dbo.Division d
INNER JOIN
    dbo.Hospital h ON h.HospitalId = d.HospitalId
GROUP BY
    h.HospitalId, h.Name
    • 更新**

对于SQL Server2017之前的版本,您需要使用FOR XML PATH方法-类似于以下内容:

SELECT 
    h.HospitalId, h.Name,
    STUFF ((SELECT ',' + d.DivisionName
            FROM @Division d
            WHERE d.HospitalId = h.HospitalId
            FOR XML PATH('')), 1, 1, '') 
FROM 
    @Hospital h 
GROUP BY
    h.HospitalId, h.Name

相关问题