2 つのシステム間の統合に取り組んでいます。私のコース システムには、スタッフ メンバーである必要があるインストラクターへの参照があります。問題は、コース システムではインストラクター レコードをローカルで作成できることです (スタッフ システムからコース システムにフィードするジョブが既にあります)。
コースには複数のインストラクターがいる場合があり、ビジネス上の理由から、ローカルのインストラクター レコードがプレースホルダーとして作成されることがあります。すべての「実際の」インストラクターを 1 つの文字列に連結する必要がありますが、コースに設定されているインストラクターのいずれかが「実際の」インストラクターでない場合は、空の文字列を出力する必要があります。また、インストラクターが割り当てられていないコースを作成することもできます。
コースシステム
Courses instructorID InstructorName InstructorOrder
-----------------------------------------------------
ach01 1 Smith 1
ach01 2 Brown 2
phy01 3 James 1
sci01 1 Smith 1
sci01 4 Doe 2
acc01 NULL NULL NULL
スタッフ制度
ID LastName
--------------
1 Smith
2 Brown
3 James
出力
Course Instructors
-------------------------
arc01 'Smith, Brown'
phy01 'James'
sci01 ''
acc01 ''
これは私が思いついたSQLですが、同じ結果を得るためのより良い方法があるかどうか知りたいです
select courseID,
isnull(case max(case when x.rn = 1 then isnull(lastname, '-|-') else '' end) when '-|-' then NULL else max(case when x.rn = 1 then lastname else '' end) end +
case max(case when x.rn = 2 then isnull(lastname, '-|-') else '' end) when '-|-' then NULL else max(case when x.rn = 2 then ', ' + lastname else '' end) end +
case max(case when x.rn = 3 then isnull(lastname, '-|-') else '' end) when '-|-' then NULL else max(case when x.rn = 3 then ', ' + lastname else '' end) end +
case max(case when x.rn = 4 then isnull(lastname, '-|-') else '' end) when '-|-' then NULL else max(case when x.rn = 4 then ', ' + lastname else '' end) end
, '') Instructors
from (select courseID, s.lastname,
ROW_NUMBER() over(partition by courseID order by InstructorOrder) rn
from Courses c left join
Active_Staff s on c.instructorID = s.ID
) x
group by courseID