sql - 各部门集团员工

标签 sql sql-server grouping group-concat

我有一张表详情

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 做到这一点呢?我不知道任何功能。

最佳答案

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) 

关于sql - 各部门集团员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132571/

相关文章:

mysql - 根据Microsoft SQL Server中其他表中的行的位置排列一个表的列

php - 根据两列值和每组中一列的总和对多维数组数据进行分组

sql - PostgreSQL 8.2.9 枚举类型

sql - 如何过滤 Postgresql 中的 JSON 列?

C# sql 实例化,是否可以列出对象实例上下文中未释放的所有 sql 连接?

.net - 令人惊讶的性能差异 : List. Contains、SortedList.ContainsKey、DataRowCollection.Contains、Data Table.Select、DataTable.FindBy

sql - 一条记录出现的次数 : SQL Server

java-8 - 具有值映射函数生成列表的java 8列表分组

MatLab AccumArray 意外改变顺序

mysql - 插入多个值时 Node mysql 上的“ER_PARSE_ERROR”