当前位置: 代码迷 >> Sql Server >> ,表A怎样与表B中的多字段匹配
  详细解决方案

,表A怎样与表B中的多字段匹配

热度:71   发布时间:2016-04-24 19:51:15.0
求助,表A怎样与表B中的多字段匹配
现有表A,字段如下
列名:ad             ad1
列值:广河县畜牧局   null
表B,字段如下
列名:p_id   pro   c_id    city      t_id     town
列值:  1    北京   1      null        1      昌平
        3   河北    3     石家庄市     3     长安区
其中p_id、c_id与t_id是一一相对应的
怎样用表A中的ad与表B中的pro匹配成功,则在ad1输出pro,
如果匹配不成功,则与表B中的city匹配,若成功,则在ad1输出city对应的pro,
如果匹配不成功,则与表B中的town匹配,若成功,则在ad1输出与town对应的pro(存在一个town对应多个pro的情况)
匹配

------解决方案--------------------
select ad1=case when ad=pro then pro when ad=city then pro when ad=town then pro else '' end from 表A,表B
------解决方案--------------------

select N'广河县畜牧局' ad,   null as ad1
into #A
union all select N'北京畜牧局' ad,   null as ad1

select  1 p_id,N'北京' pro,1 c_id,null city,1 t_id,N'昌平' town
into #B
union all select  3 ,N'河北',3,N'石家庄市',3,N'长安区'

select ad,ad1=max(isnull(ad1,''))
from
(
select ad
,ad1=case 
when CHARINDEX(pro,ad)>0 then pro
when CHARINDEX(city,ad)>0 then city
when CHARINDEX(town,ad)>0 then town
end
from #A,#B
)t
 group by ad


这样?
------解决方案--------------------
select distinct ad,pro from 
(select ad,
ad1=case 
when CHARINDEX(pro,ad)>0 then pro
when CHARINDEX(city,ad)>0 then city
when CHARINDEX(town,ad)>0 then town
end
from #A,#B),#B where ad1=pro or ad1=city or ad1=town
这样?
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:


select N'广河县畜牧局' ad,   null as ad1
into #A
union all select N'北京畜牧局' ad,   null as ad1

select  1 p_id,N'北京' pro,1 c_id,null city,1 t_id,N'昌平' town
into #B
union all select  3 ,N'河北',3,N'石家庄市',3,N'长安区'

select ad,ad1=max(isnull(ad1,''))
from
(
select ad
,ad1=case 
when CHARINDEX(pro,ad)>0 then pro
when CHARINDEX(city,ad)>0 then city
when CHARINDEX(town,ad)>0 then town
end
from #A,#B
)t
 group by ad


这样?

辛苦了辛苦了,表A中ad有多个不同的值,表B中pro、city、town都有很多不同的值,上万条,怎么先写入临时表???还有输出结果,ad先与B表中pro匹配,成功ad1显示pro的值(例如北京),不成功与city匹配,成功则显示的是city对应的pro的值(例如石家庄对应的是河北,则此ad1显示为河北,而不是石家庄),如不成功则与town匹配,成功显示town对应的city对应的pro(例如长安区对应的city是石家庄,石家庄对应的pro是河北,则ad1显示为河北),求大神继续帮忙啊,在线等,急用。。。。。。万分感谢啊。。。。



select N'广河县畜牧局' ad,   null as ad1
into #A
union all select N'北京畜牧局' ad,   null as ad1

select  1 p_id,N'北京' pro,1 c_id,null city,1 t_id,N'昌平' town
into #B
union all select  3 ,N'河北',3,N'石家庄市',3,N'长安区'

select ad,ad1=max(isnull(ad1,''))
from
(
select ad
,ad1=case 
when CHARINDEX(pro,ad)>0 or CHARINDEX(city,ad)>0 or CHARINDEX(town,ad)>0 then pro
end
from #A,#B
)t
 group by ad

把#A ,#B换成你自己的表就行了。不用插入临时表。这临时表只是我用来放测试数据的

结果如果是广河县,没有进行匹配啊,ad1什么都没显示....请继续帮忙啊,大神。。。。

我的#B表只有两条,没有匹配到是因为#B表中没有广河县的数据。
  相关解决方案