組織の監督関係階層を示すレポートを作成する必要があります。監視ラインを設定するには、さまざまな方法があります。以下はその一部です。
Vice President-Associate VP-Director-Assistant Director-Supervisor-worker
Vice President-Associate VP-Director-Supervisor - worker
Vice President-Director-Assistant Director-Supervisor-worker
Vice President-Director-worker
Vice President-Director-Director B-Worker
Vice President-Director-Director B-Supervisor->Worker
Vice President-Associate VP-worker
Vice President-worker
Vice President-Director-Assistant Director
Vice President-Director-worker
これらは、階層内の各役割の表です。つまり、VP テーブル、AVP テーブル、ディレクター テーブルなどです。階層ラインに特定のロールが含まれていない場合、その値は null に戻ります。プログラムを作成したので、Worker テーブルから始めて、そこからすべてのテーブルを結合します。可能なすべての結合を考慮に入れようとしました (以下のプログラムを参照)。Supervisor_Position_NBR=POSITION_NBRを使用してさまざまな結合の組み合わせを使用しています。行が次のように見えるさまざまな方法があります。ここでは小さな例を示します。
副社長 Associate_VP Director Director B Assistant_Director Supervisor Worker ============== ============ ======== ======= === ================= ========== ====== ジェーン スミス ジョー ロバーツ マーシー ジェームズ ヌル ヌル ジェームズ メア マット G
ジェーンスミス ジョー ロバーツ マーシー ジェームス ヌル ジェームズ マーレ ジェス D ジェーン スミス ジョー ロバーツ マーシー ジェームス ヌル フランク ジェイ キャロル R ジェーン スミス ヌル マーティ ボブ ヌル ソニア ヌル サム スミス ジェーン スミス ヌル マーティ ボブ ヌル ソニア ヌル ネイト ロウ ジェーン スミス ヌル ヌル ヌル ヌル ヌル ヌルラルフ・コール
私の2つの問題は次のとおりです。
- VP 、Director および Worker を含む監督ラインがあるが、Director と Worker の両方が VP に直接レポートする場合、クエリを実行すると Director がドロップオフし、Worker だけが表示されます。したがって、この:
副社長 アソシエイト_VP ディレクター ディレクター B アシスタント ディレクター スーパーバイザー ワーカー
============== =========== ======= ======== == ================ ========= ======= ジェーン・スミス Null Null Null Null Null MarcyJames
これを元に戻す必要がある場合:
副社長 アソシエイト_VP ディレクター ディレクター B アシスタント ディレクター スーパーバイザー ワーカー
============= =========== ======== ======== == ======== ======= ========= ===== ジェーン・スミス Null Null Null Null Null Marcy James
Jane Smith Null Joe Roberts Null Null Null Null
- このクエリを作成するためのよりクリーンで効率的な方法はありますか?
どんな援助も大歓迎です。
select
vp.Vice_President,
avp.Associate_VP,
d.director,
db.director_B,
ad.Assistant_Director,
s.Supervisor,
w.worker
from gw_ppp.dbo.vw_worker w
left join gw_ppp.dbo.vw_Manager_Sup_Role s
on w.Supervisor_Position_NBR=s.POSITION_NBR
left join gw_ppp.dbo.vw_ADIR_Role AD
on w.Supervisor_Position_NBR=AD.POSITION_NBR
or s.Supervisor_Position_NBR=AD.POSITION_NBR
left join gw_ppp.dbo.vw_Dir_Role_B db
on w.Supervisor_Position_NBR=db.POSITION_NBR
or s.Supervisor_Position_NBR=db.POSITION_NBR
or AD.Supervisor_Position_NBR=db.POSITION_NBR
left join gw_ppp.dbo.vw_Dir_Role D
on w.Supervisor_Position_NBR=D.POSITION_NBR
or s.Supervisor_Position_NBR=D.POSITION_NBR
or AD.Supervisor_Position_NBR=D.POSITION_NBR
or db.Supervisor_Position_NBR=D.POSITION_NBR
left join gw_ppp.dbo.vw_AVP_Role AVP
on w.Supervisor_Position_NBR=AVP.POSITION_NBR
or s.Supervisor_Position_NBR=AVP.POSITION_NBR
or AD.Supervisor_Position_NBR=AVP.POSITION_NBR
or D.Supervisor_Position_NBR=AVP.POSITION_NBR
left join gw_ppp.dbo.vw_VP_Role VP
on w.Supervisor_Position_NBR=VP.POSITION_NBR
or s.Supervisor_Position_NBR=vp.POSITION_NBR
or ad.Supervisor_Position_NBR=vp.POSITION_NBR
or d.Supervisor_Position_NBR=vp.POSITION_NBR
or avp.Supervisor_Position_NBR=vp.POSITION_NBR
order by w.worker
Role ビューの作成に使用するプログラムは次のとおりです。
CREATE VIEW [vw_VP_Role]
AS
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as Vice_President,
POSITION_NBR ,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as vp_Manager
FROM [New_EEs].[dbo].[ADPFile]
where Job_title in
('Vice President','Sr VP & Chief Financial Officer','Sr. Vice President');
CREATE VIEW [vw_AVP_Role]
AS
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as Associate_VP,
POSITION_NBR,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as Avp_Manager
FROM [New_EEs].[dbo].[ADPFile]
where Job_title in
('Associate Vice President','Senior Performance Officer');
CREATE VIEW [vw_Dir_Role]
AS
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as Director,
POSITION_NBR,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as Dir_Manager
FROM [New_EEs].[dbo].[ADPFile]
where Job_title in
('Director','Chief Information Officer','Deputy Controller','Director of Operations & Staff Dev')
and not (First_Name + ' ' + Last_Name) in ('Michelle James','Edward Lachterman', 'Nafissa Hannat')
CREATE VIEW [vw_Dir_Role_B]
AS
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as Director_B,
POSITION_NBR,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as Dir_Manager
FROM [New_EEs].[dbo].[vw_ADPFile]
where (First_Name + ' ' + Last_Name) in ('Michelle James','Edward Lachterman', 'Nafissa Hannat')
CREATE VIEW [vw_ADIR_Role]
AS
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as Assistant_Director,
POSITION_NBR,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as AD_Manager
FROM [New_EEs].[dbo].[ADPFile]
where Job_title= 'Assistant Director'
CREATE VIEW [vw_Manager_Sup_Role]
AS
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as Supervisor,
POSITION_NBR,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as Sup_Manager
FROM [New_EEs].[dbo].[vw_ADPFile]
where Job_title in ('Supervisor','Campus Administration Manager','Compensation & Benefits Manager',
'Cottage Manager', 'Manager','Office Manager','Operations Manager','Recruiting Manager','Special Projects/Rep & Compliance Manager', 'Talent Manager','Youth Development Coordinator') or (First_Name + ' ' + Last_Name)='Rosa Nunez Pena';
CREATE VIEW [vw_worker]
as
SELECT
File_NBR,
job_title,
(First_Name + ' ' + Last_Name) as worker,
POSITION_NBR,
Supervisor_Position_NBR,
(Mngr_FName + ' ' + Mngr_LName ) as worker_Manager
FROM [New_EEs].[dbo].[ADPFile]
where Job_title not in
('Associate Vice President','Vice President','Sr VP & Chief Financial Officer','Sr. Vice President', 'Director','Chief Information Officer','Deputy Controller','Director of Operations & Staff Dev', 'Assistant Director','Supervisor','Campus Administration Manager','Compensation & Benefits Manager', 'Cottage Manager', 'Manager','Office Manager','Operations Manager','Recruiting Manager','Special Projects/Rep & Compliance Manager', 'Talent Manager','Youth Development Coordinator','Senior Performance Officer') and not (First_Name + ' ' + Last_Name)='Rosa Nunez Pena';