2010-12-13 5 views
0

私は、anameという1つのフィールドしか含まないFinalForgottenというテーブルを持っています。フィールドは、スミスジョンまたはスミス、ジョンのように見えるかもしれません。したがって、最後と最初の両方の名前は同じフィールドにあり、スペースまたはコンマで区切られます。防御フィールドには、first_name、last_name、middle_initialの3つのフィールドがあります。 first_nameフィールドには、データINのAnameフィールド(例:John)に正確に一致するデータが含まれます。また、last_nameフィールドには、anameフィールドのデータ(たとえばSmith)の一部に一致するデータが含まれます。ミドルネームの初期値を持つすべてのFinalForgotten anameレコードを新しいテーブルに追加しようとしています(Smith、John Sなど)。ディフェンステーブルは、このミドルイニシャルを持つものです。テーブル内のフィールドに空白またはカンマ-MSアクセスがあるかどうかをチェック

これは動作します:

SELECT left([aname],InStr(1,[aname],",")-1) & " "& right([aname],Len(aname)-InStr(1,[aname],",")) & " "& summary_judgment.middle_initial AS fullnameINTO FinalForgottenWithMiddle FROM FinalForgotten INNER JOIN summary_judgment ON((left(FinalForgotten.aname,InStr(1,FinalForgotten.[aname],",")-1))=summary_judgment.last_name) AND((right(FinalForgotten.aname,Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))=summary_judgment.first_name)); 

をしかし、それはFinalForgottenのようなコンマ持っていないフィールド含まれている必要があります「無効なプロシージャコール」を返します: スミスジョン。

が故に、これに対処するために、私は、カンマがフィールドにあったかどうかを考慮してみました:

SELECT left([aname], IIF(instr([aname], ",") = 0, InStr(1,[aname]," ")-1),InStr(1,[aname],",")-1) & ", " & right([aname], IIF(instr([aname], ",") = 0,Len(aname)-InStr(1,[aname]," "),Len(aname)-InStr(1,[aname],",") & " " & defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle 
FROM FinalForgotten INNER JOIN defense_final ON 
((right(FinalForgotten.aname,IIF(instr([aname], ",") = 0,Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," ")),Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))=defense_final.first_name)) 
AND 
((left(FinalForgotten.aname,,IIF(instr([aname], ",") = 0,InStr(1,FinalForgotten.[aname]," ")-1)),InStr(1,FinalForgotten.[aname],",")-1))=defense_final.last_name); 

これは私に、「不足しているオペレータの構文」エラーを与え、AS単語を強調表示します。

お返事ありがとうございます。

答えて

0

括弧が欠けているようです。

SELECT left(
     [aname], 
     IIF(instr([aname], ",") = 0, 
     InStr(1,[aname]," ")-1, 
     InStr(1,[aname],",")-1 
     ) 
    ) 
    & ", " & 
    right(
     [aname], 
     IIF(instr([aname], ",") = 0, 
     Len(aname)-InStr(1,[aname]," "), 
     Len(aname)-InStr(1,[aname],",") 
     ) 
     ) 
    & " " & 
    defense_final.middle_initial AS fullname 
INTO FinalForgottenWithMiddle 
FROM FinalForgotten 
INNER JOIN defense_final 
ON 

    right(FinalForgotten.aname, 
    IIF(instr([aname], ",") = 0, 
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "), 
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",") 
    ) 
    )=defense_final.first_name 

AND 

    left(FinalForgotten.aname, 
    IIF(instr([aname], ",") = 0, 
     InStr(1,FinalForgotten.[aname]," ")-1, 
     InStr(1,FinalForgotten.[aname],",")-1 
     ) 
    )=defense_final.last_name 
+0

ありがとう、私はあなたがクエリをレイアウトする方法も気に入っています。 – JohnMerlino

関連する問題