求个sql语句的实现
A表数据如下:
ID	selling_shop	jbr	chexing	mark
1	4SQD0066	640217	ACCD-554	
2	4SQD0066	610A05	DFBZ-6666	
3	4S2J0605	640A92	DFS-978	
4	4SQD0076	590A81	CDD-223	
5	4SQD0076	640035	TYY-2234	
6	4S2J0609	640035	DFBZ-6666	
7	4SQD0078	610A05	DFS-978	
8	4SQD0078	640217	CDD-223	
9	4S2J0703	610017	ACCD-554	
10	4S2J0704	610172	DFS-978	
B表数据如下:
selling_shop	jbr	guize
4SQD0065	640A95	BYD-%
4SQD0066	610A05	DFBZ-%
4SQD0076	590A81	%-%
4SQD0077	500A51	%-%
4SQD0078	%	%-%
4SQD0079	%	%-%
请教大家,可否通过sql语句实现,按照B表中的规则,将符合条件的A表中的mark置为1,条件为:B表中的selling_shop等于A表中的selling_shop;B表中的jbr匹配A表中的jbr,%为模糊匹配;B表中的guize匹配A表中的chexing,%为模糊匹配。
如上例中,执行后的结果应该是A表中ID为2478的这几个mark为1.求教大家,非常感谢!
------解决方案--------------------
--ID	selling_shop	jbr	chexing	mark
--selling_shop	jbr	guize
update tbA a
set a.mark = (case when a.chexing like (case when b.guize = '%-%' then '%' else b.guize end)+'%' then 1 else 0 end)
from tbB b
where a.selling_shop = b.selling_shop and (a.jbr = (case when b.jbr = '%' then a.jbr else b.jbr end))
------解决方案--------------------;with cte as (
select a.id,a.[selling_shop],a.jbr,a.chexing,CASE WHEN  CHARINDEX(REPLACE(b.[guize],'%',''),a.[chexing] )>0 THEN 1 ELSE 0 END mark
from [A] LEFT JOIN [B] ON (a.[selling_shop]=b.[selling_shop] AND a.[jbr]=b.[jbr] )OR (a.[selling_shop]=b.[selling_shop] AND a.[jbr] LIKE b.[jbr])
)
update a
set a.mark=cte.mark
from cte where a.id=cte.id