使用 Concat 方法优化查询

Optimize query using Concat method

我有一个使用 join 的查询,然后是 group by caseId,然后是一个使用 STUFF.

的类似 concat 的函数
SELECT distinct [CaseID], STUFF((SELECT ';' +space(1)+ A.[AssignedPathologist]+' ' FROM CTE1 A  
WHERE A.[CaseID]=B.[CaseID] FOR XML PATH('')),1,1,'') As [AssignedPathologist]  
From CTE1 B   
Group By [CaseID] 

问题是这个查询非常非常慢,我尝试使用 CONCAT 来优化它。

SELECT distinct A.[CaseID], [AssignedPathologist] = CASE A.AssignedPathologist = B.AssignedPathologist
WHEN 1 THEN A.AssignedPathologist
ELSE CONCAT(A.AssignedPathologist, ' ', B.AssignedPathologist)
END
FROM CTE1 A
INNER JOIN CTE1 B ON A.[CaseID]=B.[CaseID] 
END

但它给我语法错误

[AssignedPathologist] = CASE A.AssignedPathologist = B.AssignedPathologist

这是合乎逻辑的,因为我在这里使用了两次 =

有什么方法可以使用 CONCAT 或其他方法优化我的查询吗?

谢谢

我会试试这个:

SELECT [CaseID], 
       STUFF( (SELECT CONCAT('; ', A.[AssignedPathologist])
               FROM CTE1 A  
               WHERE A.[CaseID] = B.[CaseID] 
               FOR XML PATH('') 
               ),1, 1, ''
            ) As [AssignedPathologist]  
FROM (SELECT DISTINCT CaseID CTE1 B) B;   

对于较新的版本,您可以使用 string_agg() :

SELECT CASEID, STRING_AGG(AssignedPathologist, '; ') AS AssignedPathologist
FROM CTE1 C1
GROUP BY CASEID;