我有这两张桌子
f_data
(
id (int, null),
name(varchar(255), null),
control (int, null),
)id名称控制
1255年,,1131238601
92,ENCARNACION PAMELA,1131237483
费利兹·路易斯·曼努埃尔( FELIZ LUIS MANUEL ),1131240995
688,HERRAND DIOMEDES,1131238666
1887年,何塞·阿尔贝托·马托斯,1131240215
est_data
(
id(int, null),
name(varchar(255), null),
firstname(varchar(255), null),
lastname(varchar(255), null),
)id名名姓姓
201201255,ADALGISA,ALMONTE,JIMENEZ,
201200092,帕梅拉,恩卡纳西翁,
201223376,路易斯·曼纽尔,费利兹,
201200688,DIOMEDES,HERRAND,MARI E,
201201887,何塞·阿尔贝托,马托斯,
和这个SQL代码
select *
from est_data
where
CASE
WHEN
lastname = ' '
then
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name))
ELSE
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name))
END in
(Select ltrim(rtrim(name)) From f_data where id = 1887)的结果:
CASE
WHEN
lastname = ' '
then
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name))
ELSE
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name))
END是“何塞·阿尔贝托·马托斯”
及其结果:
Select ltrim(rtrim(name)) From f_data where id = 1887是“何塞·阿尔贝托·马托斯”
但是,当名称相同时,代码返回0行。这里可能有什么问题?
注意:我们使用的是Server 2000
发布于 2012-10-12 15:47:47
仔细看你的数据。在f_data中,name值为"JOSE“。在est_data中,您有一个name "JOSE“、一个firstname "ALBERTO”和一个lastname "MATOS“。
现在看看您对est_data的查询。您正在组合FIRSTNAME-LASTNAME-NAME,在本例中它将是"ALBERTO“,它与f_data中的值不匹配。你不能在两个地方按相同的方式排序。
如果您不相信我,只需运行这个简单的脚本来重新创建问题:
create table #f_data
(
id int,
name varchar(255),
control int
);
create table #est_data
(
id int,
name varchar(255),
firstname varchar(255),
lastname varchar(255)
);
insert into #f_data(id, name, control) values (1887, 'JOSE ALBERTO MATOS', 1);
insert into #est_data(id, name, firstname, lastname) values (1887, 'JOSE', 'ALBERTO', 'MATOS');
Select ltrim(rtrim(name)) From #f_data where id = 1887;
select CASE
WHEN
lastname = ' '
then
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name))
ELSE
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name))
END
from #est_data;
select *
from #est_data
where
CASE
WHEN
lastname = ' '
then
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name))
ELSE
ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name))
END in
(Select ltrim(rtrim(name)) From #f_data where id = 1887);发布于 2012-10-12 15:56:28
使用子查询:
select * from (
select e.*,
CASE
WHEN e.lastname = ' '
THEN ltrim(rtrim(e.firstname)) + ' ' + ltrim(rtrim(e.name))
ELSE ltrim(rtrim(e.firstname)) + ' '+ltrim(rtrim(e.lastname)) + ' ' + ltrim(rtrim(e.name))
END as wrappedName
from est_data e
) where wrappedName =
(select ltrim(rtrim(name))) from f_data where id = 1887)https://stackoverflow.com/questions/12862095
复制相似问题