2016-03-15 28 views
0

所以这是我的表设置100k行。我有大约30万行有错误的经销商相关联,即使它指的是同一个人,但只是一个不同的银行指定。发生这种情况是由于未能从以前版本的数据库准确地移植信息。简单的嵌套查询在同一张桌子上

Table CustomerName 

Name Bank Dealer SSN 
John 1 ABC unique1 
Mike 1 DEF unique2 
Mike 2 wrong unique2 
Mark 1 XYZ unique3 
Mark 2 wrong unique3 

所需的表建立

Table CustomerName 

Name Bank Dealer SSN 
John 1 ABC unique1 
Mike 1 DEF unique2 
Mike 2 DEF unique2 
Mark 1 XYZ unique3 
Mark 2 XYZ unique3 

我想编写一个查询,将目标行(行2列本质)并将其更改为银行1经销商值。有没有办法做到这一点?我正在使用T-SQL(SSMS 2016)

编辑: SSN就像客户的主键。每个客户都会有一个ssn。银行2基本上是一个拖欠账户银行。客户可能有或没有银行2帐户,但他们将拥有银行1帐户。但我的问题是,不知怎的,经销商没有通过银行2正确的权利,我需要更新到正确的价值

+0

SSNs可以依靠吗?一个SSN可以“属于”多个经销商吗?如果有银行2入场券,会不会有银行1入场券? –

+0

@Cᴏʀʏyea,SSN就像客户的主键。每个客户都会有一个ssn。银行2基本上是一个拖欠账户银行。客户可能有或没有银行2帐户,但他们将拥有银行1帐户。但我的问题是,不知怎的,经销商没有通过银行2的权利,我需要更新到正确的价值 – thestralFeather7

+0

我认为戈登的答案会做你想要的;我无法写得更好。 –

回答

3

问题是哪个Dealer使用。让我猜猜它是第一个。您可以使用CTE和update来实现:

with topudate as (
     select cn.*, 
      max(case when bank = 1 then dealer end) over (partition by ssn) as dealer1 
     from customername cn 
    ) 
update toupdate 
    set dealer = dealer1 
    where dealer <> dealer1 or dealer is null; 

如果你有获得正确的名称一些其他的逻辑,那么这将走在case表达代替。

+0

像魅力一样工作。谢谢@Gordon Linoff – thestralFeather7

0
update bank2 
    set bank2.dealer = bank1.dealer 
    from CustomerName bank1 
    join CustomerName bank2 
     on bank2.SSN = bank1.SSN 
     and bank2.Bank = 2 
     and bank1.Bank = 1