我正在尝试使用逗号分隔员工ID的子查询填充临时表中的Employees
字段。我的语法不正确。
将逗号分隔的员工ID插入临时表的正确语法是什么?这是我的代码:
declare @CommaSeperatedList varchar(max)
create table #tmp
(
ManagerId int,
Employees varchar(max)
)
insert into #tmp (ManagerId, Employees)
select
m.Id,
select @CommaSeperatedList = COALESCE(@CommaSeperatedList + ', ', '') + cast(emp.Id as varchar from emp select @CommaSeperatedList
from Manager m
inner join Employee emp on
m.EmployeeId = emp.Id
答案 0 :(得分:2)
除非您使用具有新STRING_AGG
功能的SQL Azure或SQL Server 2017,否则最佳选择是使用FOR XML PATH('')
方法。
看起来如下......
SELECT
e1.mgrid,
Employees = STUFF((
SELECT
CONCAT(', ', e2.empid)
FROM
HR.Employees e2
WHERE
e1.mgrid = e2.mgrid
FOR XML PATH('')
), 1, 2, '')
FROM
HR.Employees e1
WHERE
e1.mgrid IS NOT NULL
GROUP BY
e1.mgrid;
HTH, 杰森
答案 1 :(得分:0)
您可以使用这些示例来了解如何连接行。小心使用XML PATH - 它无法消除你的CPU性能。但如果它不是太多行,我会选择XML PATH。
在这里寻找更多选项https://www.red-gate.com/simple-talk/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
示例可能是这样的:
SELECT ',' + SUB.Name AS [text()] FROM Production.ProductSubcategory SUB
WHERE SUB.ProductCategoryID = CAT.ProductCategoryID FOR XML PATH('') , 1, 1, '' ) AS [Sub Categories] FROM Production.ProductCategory CAT