I'm joining a number of tables in SQL Server and I need to return all possible manager's email address for a Facility. Possible manager(s) are determined by the country the facility is in.
Ideally I would like to only return a single row for a each facility and have all the managers email addresses in a single cell separated with a semicolon.
I have tried Pivot and COALESCE but I haven't been able to produce the desired result, does anyone know how to does this? Or am I going about this in completely the wrong way?
Tables
CREATE TABLE Facility(
[FacilityId] [int] NOT NULL,
[Address] [varchar](256)
[CountryCode] [char](2) NOT NULL,
)
CREATE TABLE ManagementDivision(
[ManagementDivisionId] [int] NOT NULL,
[Name] [varchar](256)
[CountryCode] [char](2) NOT NULL,
)
CREATE TABLE Manager(
[ManagerID] [numeric](8, 0) NULL,
[ManagementDivisionId] [int] NOT NULL
)
CREATE TABLE Employee(
[EmployeeId] [numeric](8, 0) NOT NULL,
[mail] [varchar](1000) NULL
)
Example Data
insert into Facility (FacilityId, Address, CountryCode) values(1, '123 Fake St' 'US')
insert into Facility (FacilityId, Address, CountryCode) values(2, '789 Forgery Rd' 'US')
insert into Facility (FacilityId, Address, CountryCode) values(3, '567 Bogus Bld' 'AU')
insert into ManagementDivision (ManagementDivisionId, Name, CountryCode) values(1, 'East Coast USA' 'US')
insert into ManagementDivision (ManagementDivisionId, Name, CountryCode) values(2, 'West Coast USA' 'US')
insert into ManagementDivision (ManagementDivisionId, Name, CountryCode) values(3, 'Central USA' 'US')
insert into ManagementDivision (ManagementDivisionId, Name, CountryCode) values(4, 'Australia' 'AU')
insert into Manager (ManagerId, ManagementDivisionId) values(1, 1)
insert into Manager (ManagerId, ManagementDivisionId) values(1, 2)
insert into Manager (ManagerId, ManagementDivisionId) values(2, 3)
insert into Manager (ManagerId, ManagementDivisionId) values(3, 4)
insert into Employee (EmployeeId, mail) values(1, 'manager1@somedomain.com')
insert into Employee (EmployeeId, mail) values(2, 'manager2@somedomain.com')
insert into Employee (EmployeeId, mail) values(3, 'manager3@somedomain.com')
Desired Result
FacilityId Address CountryCode ManagerEmail
1 123 Fake St US manager1@somedomain.com; manager2@somedomain.com;
2 789 Forgery Rd US manager1@somedomain.com; manager2@somedomain.com;
3 567 Bogus Bld AU manager3@somedomain.com;