2016-12-07 5 views
0

MSSS 2008の3つのテーブル間の結合を含むテーブルを作成しようとしています。ファクトテーブル、日付テーブル、およびコーステーブルがあります。私はそれらをベーステーブルにするために参加する必要があります。日付表にはアカデミック・イズ・ルックアップという1つのパラメータがあり、このパラメータの値は2000/1、2001/2のようなものです。ベーステーブルのこのパラメータは、CensusYear、StartYear、ApplicationYearなどの3つのパラメータに分離する必要があります。したがって、私は複数回データテーブルが必要です。私は内部結合クエリを実行し、すでに4つの内部結合ステートメントを持っていますが、私は余分な年を取っています、そして、私は何年も失っています。私の質問はどこかで間違っているはずです。SQL Serverで内部結合に1つのテーブルを複数回使用する方法はありますか。

添付ファイルには、MS Accessで作成したデザインビューが含まれています。テーブルを表示して作成する必要があることを理解するのに役立ちます。 [MS Accessの中にデザインビュー]、[1]

SELECT 
A.[EventCount], 
B.[AcademicYearLookup] AS [CensusYear], 
C.[AcademicYearLookup] AS [StartYear], 
D.[AcademicYearLookup] AS [ApplicationYear], 
B.[CurrentWeekComparisonFlag], 
B.[AcademicWeekOfYear], 

case 
     when A.[ApplicationCensusSK] = 1 then 'Same Year' 

     when A.[ApplicationCensusSK] = 2 then 'Next Year' 

     when A.[ApplicationCensusSK] = 5 then 'Last Year' 
     ELSE 'Other' 
END as [CensusYearDescription], 

B.[CurrentAcademicYear], 
A.[StudentCodeBK], 
A.[ApplicationSequenceNoBK], 
A.[CourseSK], 
A.[CourseGroupSK], 
A.[CourseMoaSK], 
A.[CboSK], 
A.[CourseTaughtAbroadSK], 
A.[ApplicationStatusSK], 
A.[ApplicationFeeStatusSK], 
A.[DecisionResponseSK], 
A.[NationalityCountrySK], 
A.[DomicileCountrySK], 
A.[TargetRegionSK], 
A.[InternationalSponsorSK] INTO dbo.[BaseTable3yrs] 

FROM Student.FactApplicationSnapshot A 

INNER JOIN Conformed.DimDate AS B ON A.[CensusDateSK] = B.[DateSK] 

INNER JOIN Conformed.DimDate AS C ON A.[AcademicYearStartDateSK] = C.[DateSK] 

INNER JOIN Conformed.DimDate AS D ON A.[ApplicationDateSK] = D.[DateSK] 

INNER JOIN Student.DimCourse ON A.CourseSK = Student.DimCourse.CourseSK 

WHERE (((B.CurrentAcademicYear) In (0,-1)) 
AND ((A.ApplicationCensusSK) In (1,2,5)) 
AND ((Student.DimCourse.DepartmentShortName)= 'TEACH ED')); 

/* the query to check that the result it's correct or not, and I check it by academic week of year, and I found that I am lossing some data, and I have some extra data, means maybe join is wrong*/ 

select * from [BaseTable3yrs] 
where [StudentCodeBK]= '26002423' 
AND [ApplicationSequenceNoBK] = '0101' 
order by [AcademicWeekOfYear] 

答えて

0

再帰を行うことは、このように参加すると、それが重複するレコードを取得するのは簡単です。適合したデータを個別に収集してtable variableにして、それに参加することができます。これにより、クエリがより読みやすくなります。

メインクエリでSELECT DISTINCTを試すこともできます。

関連する問題