2016-05-23 14 views
-1

以下は異なるテーブルのデータです。異なるテーブルのデータを日付範囲の間に1つのテーブルに結合するSQL Server

ID  StudentID Tablename StartDate enddate 
8849 2   Service  11/4/2010 11/2/2011 
8850 2   Service  11/4/2010 11/2/2011 
16512 2   Placement 11/4/2010 6/30/2011 
16513 2   Placement 09/01/2011 11/02/2011 

私は以下のような出力をしたい:

SE_ID ST_ID PL_ID StartDate enddate 
8849 2  16512 11/04/2010 06/30/2011 
8849 2  16513 09/01/2011 11/02/2011 
8850 2  16512 11/04/2010 06/30/2011 
8850 2  16513 09/01/2011 11/02/2011 

私はSQLの下に試してみました。私は正しい結果を得ていますが、クエリは長くかかります。左外部結合を使わない同じ結果を達成できる他の方法はありますか?

with 
Daterange as 
( 
select SE_ID,se_st_id as ST_ID,'Service' AS Tablename, SE_StartDate AS StartDate ,se_enddate as enddate from spipublic.service 
union 
select PL_ID,pl_st_id as ST_ID,'Placement' AS Tablename, PL_StartDate AS StartDate,pl_enddate as enddate from spipublic.placement 
union 
select SU_ID,su_st_id as ST_ID,'StudentStatus' AS Tablename,SU_StartDate AS StartDate,SU_EndDate as enddate from spipublic.studentstatus 
) 
select Distinct  
     D.ST_ID 
     ,SU.SU_ID 
     , PL.PL_ID 
    , SE.SE_ID 
    ,D.startdate 
    ,D.EndDate 
from spipublic.studentstatus SU 
inner join Daterange D 
on SU.SU_ST_ID=D.ST_ID and (SU.SU_EndDate IS NULL OR SU.SU_ENDDate>D.Startdate) and SU.SU_STartDate<D.EndDate 
left join spipublic.service SE 
on SE.SE_ST_ID=D.ST_ID and (SE.SE_ENDDate IS NULL OR SE.SE_ENDDATE>D.StartDate) and SE.SE_StartDate<D.EndDate 
left join spipublic.placement PL 
on PL.PL_ST_ID=D.ST_ID and (PL.PL_EndDate IS NULL OR PL.PL_EndDate>D.StartDate) and PL.PL_StartDate<D.EndDate 
where D.st_id=2 
+0

データ1のテーブルとデータ2のテーブルの関係を理解できません。達成しようとしていることを言葉で説明できますか? –

+0

本当の助けを提供するには、ここに情報が不足しています。私たちはあなたのテーブル、インデックス、データがどんなものか分かりません。私たちは、そのような細部がないとパフォーマンスを助けることはできません。これは始めるのに最適な場所です。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

表2は私が達成しようとしている出力です。基本的には、登録、配置、サービスのような学生のすべてのデータを同じ日付範囲内で1つのテーブルに結合したいと考えています。 – GPK

答えて

1

与えられた例では言い難いですが、私の頭の上のUNION ALLがスピードアップするかもしれません。

+0

最初のチャートは、プレースメント、サービス、および登録テーブルのすべてのユニオンの結果です。その結果セットの後にデータを集計するにはどうすればよいですか? – GPK

関連する問題