例如有一个表A:
TemplateId asxcode Date ReportId Code ItemID Value
P AAD 2013/6/30 1 BS00000300 111 100
P AAD 1999/12/30 2 BS00000400 222 200
P AAD 2000/6/30 3 BS00000400 333 300
N ABN 2010/12/30 4 BS00002645 444 400
I ADX 2012/6/30 5 CF00001300 555 500
另外一张表B:
ItemID TemplateId
111 NBIPV
222 NBIP
333 BI
444 N
555 PVN
怎么判断A表中的TemplateId有没有在B表中的TemplateId出现过?
如果有出现过则用Y标记,没有出现过用N标记.
比如上面A表中的第一行中的ItemID =111 和TemplateId = P,
在B表中的ItemID =111 的TemplateId = NBIPV 中有出现过.
能写出一个SQL语句得出下面结果表吗?
Mark TemplateId asxcode Date ReportId Code ItemID Value
Y P AAD 2013/6/30 1 BS00000300 111 100
Y P AAD 1999/12/30 2 BS00000400 222 200
N P AAD 2000/6/30 3 BS00000400 333 300
Y N ABN 2010/12/30 4 BS00002645 444 400
N I ADX 2012/6/30 5 CF00001300 555 500
判断某个字段的内容在另外字段内容中出现过
------解决方案--------------------
是这样不:
drop table a
drop table b
go
create table A
(
TemplateId varchar(10),
asxcode varchar(10),
[Date] datetime,
ReportId int,
Code varchar(20),
ItemID int,
Value int
)
insert into a
select 'P' ,'AAD', '2013/6/30', 1,'BS00000300',111,100 union all
select 'P' ,'AAD', '1999/12/30', 2,'BS00000400',222,200 union all
select 'P' ,'AAD', '2000/6/30', 3,'BS00000400',333,300 union all
select 'N' ,'ABN', '2010/12/30', 4,'BS00002645',444,400 union all
select 'I' ,'ADX', '2012/6/30', 5,'CF00001300',555,500
create table b(ItemID int,TemplateId varchar(20))
insert into b
select 111, 'NBIPV' union all
select 222, 'NBIP' union all
select 333, 'BI' union all
select 444, 'N' union all
select 555, 'PVN'
select case when exists(select 1 from b
where charindex(a.TemplateId,b.TemplateId)>0
and b.ItemID = a.ItemID)
then 'Y'
else 'N'
end as mark,
a.*
from a
/*
mark TemplateId asxcode Date ReportId Code ItemID Value
---- ---------- ---------- ----------------------- ----------- -------------------- ----------- -----------
Y P AAD 2013-06-30 00:00:00.000 1 BS00000300 111 100
Y P AAD 1999-12-30 00:00:00.000 2 BS00000400 222 200
N P AAD 2000-06-30 00:00:00.000 3 BS00000400 333 300
Y N ABN 2010-12-30 00:00:00.000 4 BS00002645 444 400
N I ADX 2012-06-30 00:00:00.000 5 CF00001300 555 500