在链接表上选择query,以逗号分隔的值获取一个字段中每个主键的所有相关结果



我有一个数据库,有3个表:Employees,Clients和一个链接表。EmployeesClients表具有多对多关系。一个或多个雇员可以与一个或多个客户一起工作。有些员工(通常是新员工)可能没有任何客户。

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:

tbody> <<tr>2
employeoee_idEmployee_FirstNameEmployee_LastName
1乔治华盛顿
约翰亚当斯
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

输出:

tbody> <<tr>2
Employoee_IDEmployee_FirstNameEmployee_LastNameClients
1乔治华盛顿11
约翰亚当斯22; 33
3汤姆杰斐逊44

最新更新