如何在SQL Server中多次使用一个表进行内连接?

时间:2016-12-07 18:08:17

标签: mysql sql-server-2008 join

我正在尝试创建一个包含MSSS 2008中3个表之间连接的表。有一个事实表,一个日期表和一个课程表。我应该和他们一起制作一个基表。在日期表中,有一个参数,名称是学年查找,此参数中的值类似于2000 / 1,2001 / 2。基表中的此参数应分为三个参数,例如CensusYear,StartYear和ApplicationYear。因此,我需要多次数据表。我执行了一个内部联接查询,并且我已经有四个内部联接声明,但是我有一些额外的年份,而且我失去了几年。我相信,我的查询在某处应该是错误的。

附件包含在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]

1 个答案:

答案 0 :(得分:0)

在进行这样的递归连接时,很容易获得重复记录。您可以尝试将Conformed数据分别收集到table variable然后加入它。这也可以使您的查询更具可读性。

您也可以在主查询中尝试SELECT DISTINCT。