在同一个表上的简单嵌套查询

时间:2016-03-15 19:36:13

标签: sql tsql ssms

所以这是我的表设置为100k行。我有大约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 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

我想编写一个以行为目标的查询(本质上是Bank 2行)并将其更改为Bank 1 Dealer值。有办法吗?我正在使用T-SQL(SSMS 2016)

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

2 个答案:

答案 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表达式。

答案 1 :(得分:0)

-m