如何比较记录并更新一列

时间:2014-09-12 08:24:09

标签: sql sql-server-2008

enter image description here

这对我来说有点棘手,所以我需要你的帮助:)。

我想将列Relevant更新为0 WHERE Contract_Status_Code为10或Date_Contract_start年相同且Ranking_Value低于另一个所有记录具有相同的VIN

所以我想比较所有具有相同VIN的记录。

很少有例子来说明它:

  1. 我有VIN = 123456的两条记录。其中一个(ID = 6847)的Ranking_Value (7)高于另一个({1}}。 YEAR也是一样的,所以我想更新ID为8105的0相关列。

  2. VIN = 654321的两条记录。它们都具有相同的Ranking_Value,但id = 11012的记录的列Contract_Status_Code的值为10,所以我想将相关列更新为0 ID = 11012

  3. 最后两个记录......他们有VIN = 171819。第一个(ID = 11578)具有较高的Ranking_Value。但他们在合同开始的那一年有不同的一年。所以我不想更新两者。

  4. 也可能有三个或四个具有相同VIN的记录。

    我希望你理解我的问题。我来自德国,对不起我的英语:)

2 个答案:

答案 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
    )