我有一个数据库,有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
:
employeoee_id | Employee_FirstName | Employee_LastName | 1 | 乔治 | 华盛顿 | 2
---|---|---|
约翰 | 亚当斯 | |
3 | 汤姆 | 杰斐逊 |
您可以使用string_agg
- STRING_AGG (Transact-SQL)
select e.employee_id,
e.employee_firstname,
e.employee_lastname,
string_agg(cli.clientid, ',') AS clients
from Employees e
left join [linking table] cli
on e.employee_id= cli.employeeid;
自SQL Server 2017以来,您可以通过组by和STRING_AGG
函数实现所需的输出:
select
e.Employoee_ID,
MAX(e.Employee_FirstName) as Employee_FirstName,
MAX(e.Employee_LastName) as Employee_LastName,
STRING_AGG(CONVERT(NVARCHAR(max),ClientID), ';') as Clients
from employoee e
join links l on e.Employoee_ID = l.EmployeeID
join client c on c.Client_ID = l.ClientID
group by e.Employoee_ID
输出:
Employoee_ID | Employee_FirstName | Employee_LastName | Clients | 1 | 乔治 | 华盛顿 | 11 | 2
---|---|---|---|
约翰 | 亚当斯 | 22; 33 | |
3 | 汤姆 | 杰斐逊 | 44 |