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

标签 mysql sql-server-2008 join

我正在尝试创建一个包含 MSSS 2008 中 3 个表之间的联接的表。有一个事实表、一个日期表和一个类(class)表。我应该和他们一起做一张基 table 。日期表中有一个参数,名称为Academic Year Lookup,该参数的值如2000/1、2001/2。基表中的此参数应分为三个参数,例如 CensusYear、StartYear 和 ApplicationYear。因此,我多次需要数据表。我执行了一个内部联接查询,并且已经有四个内部联接语句,但是我获得了一些额外的年数,并且失去了一些年数。我相信,我的查询应该在某个地方是错误的。

附件中包含在 MS Access 中创建的设计 View ,它将有助于查看表格并了解我需要创建的内容。 [Ms Access 中的设计 View ][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]

最佳答案

当进行这样的递归连接时,很容易获得重复的记录。您可以尝试将符合数据单独收集到table variable中然后加入其中。这也会使您的查询更具可读性。

您还可以在主查询上尝试 SELECT DISTINCT。

关于mysql - 如何在SQL Server中多次使用一张表进行内连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41024382/

相关文章:

mysql - 用户数据库表场景。是好是坏?

mysql - 从星期三开始按周分组的 SQL

sql - 计算两个日期之间记录的存储过程

sql-server-2008 - 在 SQL Server 2008 中使用 CONTAINS 创建存储过程

join - 配置单元外部连接 : how to change the default NULL value

php - 自动提交复选框以保存到 MySQL

php - 为什么我的 PDO 总是出现 bool 错误?

sql-server - 将扩展属性附加到存储过程结果集

java - Spring Data 规范 - 带 join 的 RSQL

mysql - SQL:加入组函数