问题描述
我有2个表TestFname和TestLname。每个条目都有一些仅带有名字的条目,一些仅带有姓氏的条目,有些具有名字和姓氏的条目。每个人都有唯一的编号,因此,如果杰克·史密斯在TestFname中表示为“杰克”,在TestLname中表示为“史密斯”,则在两个表中Jack的编号均为“ 2”。
我希望查询结果只显示一次所有唯一的Person,并且对于Jack Smith,将TestFname中的“ Jack”与TestLname中的“ Smith”组合到查询结果的一条记录“ Jack Smith”中。
SELECT IIf([TestFname.F_name] Is Null,[TestLname.F_Name],[TestFname.F_Name]) AS FFName,IIf([TestFname.Number] Is Null,[TestLname.Number],[TestFname.Number]) AS Nnumber
FROM TestFname
LEFT JOIN TestLname
ON TestFname.Number = TestLname.Number
UNION
SELECT IIf([TestFname.L_name] Is Null,[TestLname.L_Name],[TestFname.L_Name]) AS LLName,[TestFname.Number]) AS Nnumber
FROM TestFname
RIGHT JOIN TestLname
ON TestFname.Number = TestLname.Number;
这仅提供2列输出:FFName和Nnumber(无LLname),并且Jack Smith出现在2条记录中,而不是在1条记录中出现,FFName和LLname都在单独的列中。
解决方法
两个SELECT语句都需要所有3个计算。
SELECT IIf([TestFname.Number] Is Null,[TestLname.Number],[TestFname.Number]) AS Nnumber,IIf([TestFname.F_name] Is Null,[TestLname.F_Name],[TestFname.F_Name]) AS FFName,IIf([TestFname.L_name] Is Null,[TestLname.L_Name],[TestFname.L_Name]) AS LLName
FROM TestFname
LEFT JOIN TestLname ON TestFname.Number = TestLname.Number
UNION
SELECT IIf([TestFname.Number] Is Null,[TestFname.Number]),[TestFname.F_Name]),[TestFname.L_Name])
FROM TestFname
RIGHT JOIN TestLname ON TestFname.Number = TestLname.Number;