同一 table 上的简单嵌套查询

Simple nested query on the same table

所以这是我的 table 10 万行设置。我有大约 30k 行与错误的经销商相关联,即使它指的是同一个人,但只是不同的银行名称。发生这种情况是因为无法从以前版本的数据库中准确地移植信息。

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设置

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,我需要更新到正确的值

问题是 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 表达式中。

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