使用与另一个表的连接仅更新Top 1或表的任何行

时间:2018-01-24 07:00:52

标签: sql-server

我想仅更新列值相同的前1列或仅列1行。 (只是逻辑解释不会继续语法) 喜欢: 更新[总计] =(具有公共列的另一个表中的值) 但是只需要将前1行或任何一行更新到当前(更新)表而不是所有符合列值的行...

e.g 表1:

Skill      Value
 abc        3    
 def        4
 xyz        3.5

表2:

Name    Skill   MyValue MyValue2(ColumnNeedsToBeUpdated)
Ram      abc       3      
shyam    abc       4
Mohan    abc       5
Raju     xyz       4
Ratan    xyz       6

现在我想根据MyValue2Table1 Skill = Value更新MyValue2,但我想更新Table2中的任何人或前1行1}} 不是全部请帮忙

预期产出:

Name    Skill   MyValue MyValue2(ColumnNeedsToBeUpdated)
Ram      abc       3      3
shyam    abc       4      
Mohan    abc       5       
Raju     xyz       4      3.5
Ratan    xyz       6

OR替代输出可以是:

Name    Skill                    MyValue MyValue2(ColumnNeedsToBeUpdated)
Ram      abc       3        Value from Table1 / no. of records with skill abc   (3/3)  
shyam    abc       4
Mohan    abc       5
Raju     xyz       4        Value from Table1 / no. of records with skill xyz   (3.5/2)
Ratan    xyz       6

1 个答案:

答案 0 :(得分:1)

Table 2中,根据Skill列的分组提供行号,并按MyValue列排序。然后使用1中的Value更新了行号为Table 1的行。

<强>查询

;with cte as(
    select [rn] = row_number() over(
        partition by Skill
        order by [MyValue]
    ), *
    from [Table2]
)
update t1
set t1.[MyValue2] = t2.[Value]
from cte t1
join [Table1] t2
on t1.[Skill] = t2.[Skill]
where t1.[rn] = 1;