You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何交换同一Customer_Id行的Rate与Pid值

如何在SQL Server的Sales表中交换同Customer_Id行的Rate和Pid值?

嘿,针对你这个需求,我们可以用自连接的UPDATE语句轻松搞定——毕竟要交换同一客户下两行的字段值,核心就是把这两行关联起来,互相赋值就行。

先看你的数据特点:每个需要处理的Customer_Id都有两行,一行Rate是1且带Pid,另一行Rate是0(Pid可能是NULL或者其他值)。我们就基于这个特征来写SQL:

最终可用的更新语句

UPDATE t1
SET 
    t1.Rate = t2.Rate,
    t1.Pid = t2.Pid
FROM Sales t1
INNER JOIN Sales t2 
    ON t1.Customer_Id = t2.Customer_Id
    AND t1.Rate != t2.Rate -- 确保匹配的是同一客户下不同Rate的两行
WHERE (t1.Rate = 1 AND t2.Rate = 0) OR (t1.Rate = 0 AND t2.Rate = 1);

为啥这么写?我给你拆解下:

  • 自连接关联:通过Customer_Id把同一客户的两行绑在一起,再加t1.Rate != t2.Rate的条件,避免同一条记录自己跟自己连接(那样更新就没意义了)。
  • 双向赋值:WHERE子句覆盖了两种情况——Rate=1的行和Rate=0的行互相匹配,所以一次UPDATE就能完成两行的字段交换,不用分两次写。
  • 兼容特殊情况:像你数据里Customer_Id=1234只有一行的情况,这条语句根本碰不到它,因为找不到对应的关联行,完全符合预期。

执行后你会得到的目标结果:

IdCustomer_IdRatePid
1803740NULL
2773741A01
3467850NULL
4767851D03
182112340E07
2595119511K73

完美实现了你要的交换效果~

内容的提问来源于stack exchange,提问作者meiji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:04:41