每个部门的集团员工

adi*_*tya 3 sql sql-server grouping group-concat

我有一张桌子 Details

DeptId        EmpID
-------      ---------
1             1
1             5
1             3
2             8
2             9
Run Code Online (Sandbox Code Playgroud)

我想将它们分组为:

DeptId      EmpIDs
-------    -------
 1          1,5,3
 2          8,9
Run Code Online (Sandbox Code Playgroud)

我想在SQL Server中使用它.我知道这可以在MySQL中使用Group_Concat函数完成.例如

SELECT DeptId, GROUP_CONCAT(EmpId SEPARATOR ',') EmpIDS
FROM Details GROUP BY DeptId
Run Code Online (Sandbox Code Playgroud)

(SQL小提琴在这里)

但是如何使用SQL Server执行此操作?我不知道任何功能.

Joh*_*Woo 5

模拟的一种方式GROUP_CONCATSQLServer是使用CROSS APPLYFOR XML PATH()

select a.[DeptId], SUBSTRING(d.detailsList,1, LEN(d.detailsList) - 1) detailsList
from 
  (
    SELECT DISTINCT [DeptId]
    FROM details
  ) a
CROSS APPLY
  (
    SELECT [EmpID] + ', ' 
    FROM details AS B 
    WHERE A.[DeptId] = B.[DeptId]
    FOR XML PATH('')
  ) D (detailsList) 
Run Code Online (Sandbox Code Playgroud)