每个部门的集团员工

Posted

技术标签:

【中文标题】每个部门的集团员工【英文标题】:Group Employee for each Department 【发布时间】:2012-10-19 09:55:20 【问题描述】:

我有一张桌子Details

DeptId        EmpID
-------      ---------
1             1
1             5
1             3
2             8
2             9

我想像这样对它们进行分组:

DeptId      EmpIDs
-------    -------
 1          1,5,3
 2          8,9

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

SELECT DeptId, GROUP_CONCAT(EmpId SEPARATOR ',') EmpIDS
FROM Details GROUP BY DeptId

(SQL Fiddle here)

但是如何使用 SQL Server 做到这一点?我不知道任何功能。

【问题讨论】:

【参考方案1】:

SQLServer 中模拟GROUP_CONCAT 的一种方法是使用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) 
See SQLFiddle Demo See SQLFiddle Demo (order by EmpID)

【讨论】:

以上是关于每个部门的集团员工的主要内容,如果未能解决你的问题,请参考以下文章

每个部门只选择一名员工

要统计不同部门的每月在职员工数&离职员工数

查询同部门某个员工信息SQL语句

如何找到每个部门工资最高的员工? [复制]

如何设计一个员工可以属于部门或部门的数据库

MySQL连接查询