SQL使用另一行中的值更新行中的值
我需要遍历一个大数据集,并将产品ID填充到该GUID中包含的所有产品的负BaseCurrencyValue的特殊ID字段中 因此,在下面的示例中,所有行的特殊ID都应该是1328 我知道如何像这样直接更新SQL使用另一行中的值更新行中的值,sql,sql-server,Sql,Sql Server,我需要遍历一个大数据集,并将产品ID填充到该GUID中包含的所有产品的负BaseCurrencyValue的特殊ID字段中 因此,在下面的示例中,所有行的特殊ID都应该是1328 我知道如何像这样直接更新 update mytable set SpecialID = productID where SpecialID is null 但我不知道如何更新其他非负价格 saleitemid productid quantity BaseCurrencyPrice saleguid
update mytable
set SpecialID = productID
where SpecialID is null
但我不知道如何更新其他非负价格
saleitemid productid quantity BaseCurrencyPrice saleguid specialsetinstanceid specialid
393191236 34 2 10 48EC5DF9 1 NULL
393191235 88 2 10 48EC5DF9 1 NULL
393191237 1328 1 -5 48EC5DF9 1 NULL
您可以使用窗口功能:
with toupdate as (
select t.*,
max(case when BaseCurrencyPrice < 0 then productid end) as new_specialID
from t
)
update toupdate
set specialid = new_specialid
where new_specialid is not null;
使用自联接:
update m1
set m1.SpecialID = m2.productID
from mytable m1 inner join mytable m2
on m2.saleguid = m1.saleguid and m2.basecurrencyprice < 0
where m1.SpecialID is null
> saleitemid | productid | quantity | BaseCurrencyPrice | saleguid | specialsetinstanceid | specialid
> ---------: | --------: | -------: | ----------------: | :------- | -------------------: | :--------
> 393191236 | 34 | 2 | 10 | 48EC5DF9 | 1 | 1328
> 393191235 | 88 | 2 | 10 | 48EC5DF9 | 1 | 1328
> 393191237 | 1328 | 1 | -5 | 48EC5DF9 | 1 | 1328