同一 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
所以这是我的 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