我必须根据不同数量的匹配列将一个代理表与一个表客户机相匹配,有些匹配所有列,有些只匹配一个或两个或三个;而不是相同的列。示例:
clients表有列 ClientID, System, Country, Office
示例数据:
01 ABC US CT
02 ABC US RI
03 ABC US MA
04 DEF US AZ
04 GHI CA PQ
05 ABC ZZ ZZ
代理表有列 AgentID, System, Country, Office
示例数据:
A1 ABC US CT
A2 ABC RI
A3 ABC US MA
B1 DEF US
B2 GHI
问题:所有代理都有一个系统值,但有些代理没有国家或办事处的值,有些代理只有系统,有些代理有系统和国家,有些代理有系统和办事处,其余的代理都有3个值:系统、国家和办事处。如果客户机只将1或2个字段与一个代理匹配,则它们将被视为“通配符”,并被视为与相应代理匹配。
如何创建与每个客户机和代理匹配的视图?并显示没有相应代理的任何客户端,如上面的客户端05?
到目前为止,我所能想到的只是创建某种表,并在3或4个步骤中附加记录,但这是如此混乱和笨拙,并将另一个表添加到混合中。
我尝试了一个coalesce语句,并用like语句和周围的带%的字段连接起来,但是我尝试过的都没有给出有效的结果。
这需要临时表还是cte?或者别的什么?我卡住了!
有什么想法吗?
2条答案
按热度按时间wribegjk1#
我认为你想要:
这将尝试连接上的两个表
system
,country
以及office
,同时允许null
中的值agents(country, office)
. 当联接未找到匹配项时,列agentID
是null
在结果集中。请注意,根据您的数据,此技术可能会导致重复
clients
结果集中的行。fslejnso2#
我想你想要最好的搭配
NULL
值作为通配符。如果是,那么apply
方法是: