SQL Server の多数のテーブルに参加していますが、施設のすべてのマネージャーの電子メール アドレスを返す必要があります。可能な管理者は、施設がある国によって決定されます。
理想的には、施設ごとに 1 行のみを返し、すべての管理者の電子メール アドレスをセミコロンで区切った 1 つのセルに入れたいと考えています。
Pivot と COALESCE を試しましたが、望ましい結果が得られませんでした。これを行う方法を知っている人はいますか? それとも、これについて完全に間違った方法で行っていますか?
テーブル
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
)
サンプルデータ
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')
望ましい結果
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;