这不应该像它一样具有挑战性。我正在尝试使用查询结果[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的记录。
请帮忙!
答案 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