我有一张像这样的桌子
T1
ID Full Name FirstName Name Birthdate
1 Marc Lussier
2 Stacy Carter
4 marc Lussier 1900-01-01
5 Stacy Carter 2020-03-05
6 Keven Devaux Keven Devaux 2021-05-09
在我的表中有错误。有时,Name
和FirstName
字段对于1 iD是空白的,而FullName
则不是。
问题是,同一个人会与另一个iD重复,但fullName将为空,您会找到与全名对应的名称和名字。
首先,我想我会做一个concat(名字和名字)并看看它们是否平等。但有时在名称或名字中有填充。
基于我的研究,我根据这个主题编写了一个查询here:
SELECT ID, FullName, FirstName, Name, Birthdate
FROM tblNames
WHERE Fullname like '%' + FirstName + '%' or Fullname like '%' + Name + '%'
查询返回:
ID Full Name FirstName Name Birthdate
1 Marc Lussier
2 Stacy Carter
但我希望查询返回:
ID Full Name FirstName Name Birthdate
1 Marc Lussier
2 Stacy Carter
4 marc Lussier 1900-01-01
5 Stacy Carter 2020-03-05
需要你的帮助:(
答案 0 :(得分:0)
尝试此查询。 Where
子句排除Full Name
,FirstName
,Name
不为空的所有行
select
*
from
myTable
where
not (
isnull(len([Full Name]), 0) > 0
and isnull(len(FirstName), 0) > 0
and isnull(len(Name), 0) > 0
)
修改
select
*
from
myTable a
where
exists (
select 1
from myTable b
where
a.id <> b.id
and replace(a.FullName, ' ', '') = replace(b.FirstName + b.Name, ' ', '')
)
答案 1 :(得分:0)
尝试 - 即使使用旧查询也不应该获取所有行
declare @t table (id int, name varchar(20), fname varchar(20), lname varchar(20));
insert into @t
values (1, ' Marc Lussier', null, null)
, (2, ' Stacy Carter', null, null)
, (4, null, 'marc', 'Lussier')
, (5, null, ' Stacy', 'Carter')
, (6, 'Keven Devaux', 'Keven', 'Devaux')
, (7, 'Keven Devaux', ' Ceven', 'Devaux');
select *
from @t t
where name is null or fname is null or lname is null
or LTRIM(rtrim(name)) <> (LTRIM(rtrim(fname)) + ' ' + LTRIM(rtrim(lname)))
答案 2 :(得分:0)
大家好,感谢您的帮助和建议。它帮助我最终找到了解决方案,我使用了concat和双重选择:
SELECT x.ID, x.FullName, X.FirstName, x.Name, x.ConcatNamex.Birthdate
from Tb1
(SELECT ID, FullName, FirstName, Name, concat((ltrim(rtrim(FirstName),'', (ltrim(rtrim(Name)) as ConcatName, Birthdate
FROM tblNames ) X
on x.ConcatName = tb1.NomCompagnie
它有效。但@uzi查询也在where子句中使用了更多过滤器。
谢谢你们:)