所以这是我的表设置为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,我需要更新到正确的价值
答案 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