日期:2014-05-17  浏览次数:20712 次

SQL 查询急!
现有一张关系表,两个字段A,B。假设A 中内容(a,b,c...) 然后b中是 对应字段。
A  B
a  a
b  c
c  b
d  a
.......

现在有另外一张表AA希望可以通过匹配字段A返回B中内容,

问题在于 
表AA中的需对应字段假设名为C 可能包含多个A字段中的内容



a.
a.b.
a.c.
a.d.c.
...

字段C中每个内容后都有一个点号做分隔,现在希望返回结果(通过上面给出的对应关系):

a.
a.c.
a.b.
a.a.b.
......

求语句或函数或存储过程。



 
------最佳解决方案--------------------
/****
现有一张关系表,两个字段A,B。假设A 中内容(a,b,c...) 然后b中是 对应字段。
A B
a a
b c
c b
d a
.......

现在有另外一张表AA希望可以通过匹配字段A返回B中内容,

问题在于  
表AA中的需对应字段假设名为C 可能包含多个A字段中的内容



a.
a.b.
a.c.
a.d.c.
...

字段C中每个内容后都有一个点号做分隔,现在希望返回结果(通过上面给出的对应关系):

a.
a.c.
a.b.
a.a.b.
......
***/

create table #AB
(c_A varchar(10),
c_B varchar(10))

insert into #AB (c_A,c_B)
values ('a','a')
insert into #AB (c_A,c_B)
values ('b','c')
insert into #AB (c_A,c_B)
values ('c','b')
insert into #AB (c_A,c_B)
values ('d','a')


create table #AA
(c_C varchar(10),
c_D varchar(10))

insert into #AA(c_C)
values('a.')
insert into #AA(c_C)
values('a.b.')
insert into #AA(c_C)
values('a.c.')
insert into #AA(c_C)
values('a.d.c.')


select * from #AB

select * from #AA

declare @c varchar(10)
select @c = ''
declare @d varchar(10)
select @d = ''
declare cur_aa cursor
for select c_C from #AA
open cur_aa
fetch cur_aa into @c
while @@fetch_status=0
begin
select  @d = '' 
select @d = @d + replace(b.c_B,' ','')+'.'
from #AA a,#AB b
where CHARINDEX(replace(b.c_A,' ','')+'.',a.c_C) >0
and a.c_C = @c
update #AA set c_D = @d
where c_C = @c
fetch cur_aa into @c
end
close cur_aa
deallocate cur_aa

select * from #AA