2017-11-01 12 views
0

私はプランメンバーの個人人口統計情報を含むテーブル(tblMembers)を持っています。複数の人に割り当てられている従業員IDがテーブルにあるかどうかを調べる必要があります。私はこれを行う簡単な方法があるように感じるが、私は苦労している。私はEmployee_IDフィールドのtblMembersを結合する自己結合クエリを作成しようとしています。そのクエリでは、メンバーの姓と名を連結した計算フィールドがあります。私が試したことは以下の通りです。SSNのような各メンバーを区別する現在のフィールドがないので、計算フィールドを作成する必要があります。このSQLは、AFirstとBFirstの値を私に求めているので機能しません。また、メモとして私はMS Accessでこのコードを書いています。参加するとWHERE句で計算フィールド付き自己結合SQLクエリ(MS Accessを使用)

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] 
WHERE AFirstLast <> BFirstLast; 

答えて

1

、あなただけの計算を繰り返す必要があります。また

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

を、あなたが持っている複数の誤植:

A,EMPLOYEE_IDはあるべきコンマを持っています末尾にカンマがない(A.EMPLOYEE_ID,

+0

ありがとうエリック、これは魅力的でした! – Chuck0185

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); 
+0

あなたのSQLは異なる結果を返すことに注意してください:OPが投稿したクエリは、同じ名字を持ち、異なる名、別のファーストネーム、同じラストネーム(例えば、John DoeとJane Doe) 。あなたはしません。 WHERE文が必要です。 –

+0

@ErikvonAsmuth - 良い点、私はクエリを修正しましたが、私はまだ 'WHERE'節は必要ないと思います! –

関連する問題