我有一个有3个表的数据库:Employees
、Clients
和一个链接表。Employees
和Clients
表具有多对多关系。一个或多个员工可以与一个或多个客户端一起工作。某些员工(通常是新员工)可能不与任何客户端一起工作。Employees
表包含以下列:
Employoee_ID, Employee_FirstName, Employee_LastName
Clients
表包含以下列:
Client_ID, Client_Name, Client_Address
我需要在Microsoft SQL Server上编写一个SQL查询,该查询选择Employee_ID
、Employee_FirstName
、Employee_LastName
,然后有一个Clients
字段,该字段在一个字段中列出每个员工正在使用的所有客户端ID。
表格:Employees
:
| 入职人员_ID|员工_名字|员工_姓氏|
| - ------| - ------| - ------|
| 1个|乔治|华盛顿|
| 第二章|约翰|亚当斯|
| 三个|汤姆|杰佛逊|Clients
:
| 客户端ID|客户名称|客户_地址|
| - ------| - ------| - ------|
| 十一|客户端Al|艾尔路1号|
| 二十二|客户帐单|比尔路2号|
| 三十三|客户克里斯|克里斯路3号|
| 四十四|客户查理|查理街30号|
链接表
| 员工ID|客户ID|
| - ------| - ------|
| 1个|十一|
| 第二章|二十二|
| 第二章|三十三|
| 三个|四十四|
我需要一个Microsoft SQL Server查询,将返回以下输出(每个员工只列出一次,所有他/她的相关客户的ID显示在同一行,在一个字段中,作为逗号分隔/分号分隔的值):
| 入职人员_ID|员工_名字|员工_姓氏|客户|
| - ------| - ------| - ------| - ------|
| 1个|乔治|华盛顿|十一|
| 第二章|约翰|亚当斯|二十二岁;三十三岁|
| 三个|汤姆|杰佛逊|四十四|
请告知如果你知道一种方法来写一个查询,以获得上述结果。目前,我得到每个雇员多次与每个客户端ID在单独的行。
我尝试使用SELECT
distinct和其他函数,但无法在每个雇员的一个字段中生成逗号分隔的客户端ID。
目前,我的查询列出了雇员"John Adams"两次,一次与其每个客户。
| 入职人员_ID|员工_名字|员工_姓氏|客户|
| - ------| - ------| - ------| - ------|
| 1个|乔治|华盛顿|十一|
| 第二章|约翰|亚当斯|二十二|
| 第二章|约翰|亚当斯|三十三|
| 三个|汤姆|杰佛逊|四十四|
尝试select (distinct) EmployeeID
以使每个员工仅列出一次,但无法在一个字段中列出所有相关的clientID。
2条答案
按热度按时间yvgpqqbh1#
您可以使用
string_agg
-STRING_AGG (Transact-SQL)gzszwxb42#
自SQL Server 2017起,您可以通过group by和
STRING_AGG
函数获得所需的输出:输出:
| 入职人员_ID|员工_名字|员工_姓氏|客户|
| - ------| - ------| - ------| - ------|
| 1个|乔治|华盛顿|十一|
| 第二章|约翰|亚当斯|二十二岁;三十三岁|
| 三个|汤姆|杰佛逊|四十四|
看看演示小提琴。