这对我来说有点棘手,所以我需要你的帮助:)。
我想将列Relevant
更新为0 WHERE Contract_Status_Code
为10或Date_Contract_start
年相同且Ranking_Value
低于另一个所有记录具有相同的VIN
。
所以我想比较所有具有相同VIN
的记录。
很少有例子来说明它:
我有VIN = 123456
的两条记录。其中一个(ID = 6847
)的Ranking_Value (7)
高于另一个({1}}。 YEAR
也是一样的,所以我想更新ID为8105
的0相关列。
VIN = 654321
的两条记录。它们都具有相同的Ranking_Value
,但id = 11012
的记录的列Contract_Status_Code
的值为10,所以我想将相关列更新为0 ID = 11012
最后两个记录......他们有VIN = 171819
。第一个(ID = 11578
)具有较高的Ranking_Value
。但他们在合同开始的那一年有不同的一年。所以我不想更新两者。
也可能有三个或四个具有相同VIN的记录。
我希望你理解我的问题。我来自德国,对不起我的英语:)
答案 0 :(得分:1)
通过将您的ID列视为唯一或标识列,我可以为您的解决方案建议以下查询:
With cte
As
(Select a.Id, a.VIN From Table a
Join (Select max(Ranking_Value) ranks,VIN From Table Group By VIN, Year(Date_Contract_start)) b
on a.VIN=b.VIN And a.Ranking_Value = b.ranks)
update table
set Relevant = 0
where (Contract_Status_Code = 10) Or
ID Not In (Select id from cte)
答案 1 :(得分:-1)
update table1
set Relevant = 0
where Contract_Status_Code = 10
or (VIN,Year,Ranking_value) not in(
select VIN,Year,max(Ranking_Value)
from table1
group by VIN,Year
)