显示属于另一个的所有值(sql server)

时间:2018-02-23 17:57:03

标签: sql-server

我有一张像这样的桌子

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

在我的表中有错误。有时,NameFirstName字段对于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

需要你的帮助:(

3 个答案:

答案 0 :(得分:0)

尝试此查询。 Where子句排除Full NameFirstNameName不为空的所有行

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子句中使用了更多过滤器。

谢谢你们:)