使用计算字段自联接SQL查询(使用MS Access)

时间:2017-11-01 17:52:43

标签: sql ms-access

我有一张表(tblMembers),其中包含计划成员的个人人口统计信息。我需要查看表中是否有分配给多个人的员工ID。我觉得有一种简单的方法可以做到这一点,但我正在努力。我尝试创建一个自联接查询,该查询在Employee_ID字段上连接tblMembers。在该查询中,我有一个计算字段,用于连接成员的名字和姓氏。以下是我所尝试的,没有当前字段可以区分每个成员(如SSN),因此我需要创建一个计算字段。这个SQL不起作用,因为它要求我提供AFirst和BFirst的值。另外作为注释我在MS Access中编写此代码。

Private Sub Workbook_Open()
If "C:\Excel\" <> ThisWorkbook.Path Then ThisWorkbook.Close

End Sub

2 个答案:

答案 0 :(得分:1)

在带有连接的WHERE子句中,您应该重复计算:

WHERE (A.FIRST_NAME & A.LAST_NAME) <> (B.FIRST_NAME & B.LAST_NAME)

此外,您还有多个印刷错误:

A,EMPLOYEE_ID有一个逗号,应该是一个点,并且最后缺少一个逗号(应该是A.EMPLOYEE_ID,

答案 1 :(得分:0)

您无法在WHERE子句中使用别名。事实上,我认为没有必要使用WHERE条款。你可以用这个:

SELECT A.BENEFIT_PERIOD, 
A.BENEFIT_TYPE, 
A.PLAN_NAME, 
A.PERSON_TYPE, 
A.LAST_NAME, 
A.FIRST_NAME, 
A.MIDDLE_NAME, 
A.SUFFIX, 
A.MARITAL_STATUS, 
A.RETIRED, 
A.HOURS_WORKED, 
A.GENDER, 
A.COVERAGE, 
A.EMPLOYEE_ID
A.TOTAL_MONTHLY_COST, 
A.PENDING_STATUS, 
A.FIRST_NAME & A.LAST_NAME AS AFirstLast, 
B.FIRST_NAME & B.LAST_NAME AS BFirstLast
FROM [Benefit Detail Report] AS A INNER JOIN [Benefit Detail Report] AS B ON A.[EMPLOYEE_ID] = B.[EMPLOYEE_ID]
and (A.FIRST_NAME <> B.FIRST_NAME or A.LAST_NAME <> B.LAST_NAME);