我正在尝试创建一个包含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]
答案 0 :(得分:0)
在进行这样的递归连接时,很容易获得重复记录。您可以尝试将Conformed数据分别收集到table variable然后加入它。这也可以使您的查询更具可读性。
您也可以在主查询中尝试SELECT DISTINCT。