如何使用一个字段使用连接切换另外两个字段?

时间:2014-08-14 22:28:54

标签: sql join ms-access-2010

这不应该像它一样具有挑战性。我正在尝试使用查询结果[codetable]来有效地将另一个查询结果[CAS]中的2个字段转换为另一个结果。这可以使用单个查询吗?看起来它应该是因为我试图“翻译”的2个字段使用相同的源来解码。

codetable.Code是一个唯一的字符串值,没有空值
codetable.Decode是唯一的字符串值,没有空值
CAS.ID是唯一标识符,没有空值
CAS.CodeP是一个非唯一的字符串值,允许空值 CAS.CodeS是一个非唯一的字符串值,允许空值

[codetable]:

Code | Decode
A    | apple
B    | bravo
C    | cat
D    | dog
...  | ...
Z    | zebra

[CAS]:

ID   | CodeS | CodeP
1    | A     | B
2    | G     | K
3    | P     | R
4    | H     | S
5    | Z     | Y

必填结果:

ID   | DecodeS| DecodeP
1    | apple  | bravo
2    | golf   | kyoto
3    | peach  | romeo
4    | hello  | sock
5    | zebra  | yellow

我试过了:

SELECT 
    CAS.ID, 
    IIf(CAS.CodeS=codetable.Code, codetable.Decode) AS DecodeS, 
    IIf(CAS.CodeP=codetable.Code, codetable.Decode) AS DecodeP
FROM CAS 
LEFT JOIN codetable ON (CAS.CodeP = codetable.Code) AND (CAS.CodeS = codetable.Code);

得到了这个:

ID   | DecodeS| DecodeP
1    | #Error | #Error
2    | #Error | #Error
3    | #Error | #Error
4    | #Error | #Error
5    | #Error | #Error

我在join语句中使用了OR运算符而不是AND(Access不喜欢这样)但实际上得到了更好的结果:

ID   | DecodeS| DecodeP
1    | #Error | #Error
2    | #Error | #Error
3    | #Error | romeo
4    | hello  | #Error
5    | zebra  | #Error

在两列中生成#Errors的记录是CodeS和CodeP值都为非null的记录。

请帮忙!

1 个答案:

答案 0 :(得分:1)

SELECT C.ID
     , CT1.Decode
     , CT2.Decode
FROM CAS C 
LEFT JOIN codetable CT1  ON C.CodeS = CT1.Code 
LEFT JOIN codetable CT2  ON C.CodeP = CT2.Code