sql - 使用 group by 子句获取每个组中的所有记录
问题描述
我有一张这样的桌子
DepartmentId EmployeeName
1 A
1 B
2 C
2 D
2 E
我希望结果是
DepartmentId EmployeeNames
1 A, B
2 C, D, E
到目前为止我能想到的查询是:
select DepartmentId, (select EmployeeName for json path) as EmployeeNames
from EmployeeTable
group by DepartmentId
for json path
但是这个行不通,因为 EmployeeName 列不在Group By
子句中,如果我在子句中命名该列,查询将给出错误的结果Group By
。
有人可以告诉我存档该结果的方式吗?
解决方案
您可以使用string_agg()
:
select DepartmentId, string_agg(EmployeeName, ',')
from EmployeeTable
group by DepartmentId;
对于旧版本,您可以执行以下操作:
select et.DepartmentId,
stuff((select concat(',', ett.EmployeeName)
from EmployeeTable ett
where et.DepartmentId = ett.DepartmentId
for xml path('')
), 1, 2, ''
)
from (select distinct DepartmentId from EmployeeTable) et;
推荐阅读
- assembly - How do I make this code output a specific fibonacci term in ARM assembly?
- python - Decorators on classmethods
- django - Django custom AppConfig breaks the project
- apache-spark - 加入 Dataframe 的相同列后,Drop 功能无法正常工作
- javascript - Referencing classes in other files
- python - 子目录结构破坏了 C++ 扩展构建
- apache-spark - 当我有两个 Spark 流在同一个笔记本中并行运行时,如何使用 saveAsTable 函数?
- python - NameError: name 'K' is not defined
- google-cloud-platform - AWS 类似 GCP 上的帐户链接和合并计费
- ios - 从 Swift 中的 HTTP 请求响应中检索 cookie