将具有多个值的表查询更新为列

时间:2018-06-07 22:50:41

标签: sql-server-2014

表名:销售

Country salesAmount ID
USA     2345         1
USA     4356         2
USA     8762         3
USA     7809         4
USA     54324        5
UK      56790        6
UK      234145      NULL  --> add 7
UK      567790      NULL  --> add 8
UK      345678      NULL  --> add 9
UK      343456      NULL  --> add 10
UK      5467891     NULL  --> add 11
UK      5923765     NULL  --> add 12
Japan   43567890    NULL  --> add 13
China   34566878    NULL  --> add 14
France  343466      NULL  --> add 15
Austria 3556689     NULL  --> add 16
India   34567891    NULL  --> add 17
Italy   3456767     NULL  --> add 18

我需要用箭头旁边的数字填充空值。有没有更快捷的方法将这些数字添加到ID列而不是使用代码(更新销售集ID = 7,其中salesAmount = 234145)

我必须为每一行使用update语句,直到结束这是非常耗时的。是否存在可用于更新一个查询中的所有行的存储过程或函数?请帮忙。感谢

1 个答案:

答案 0 :(得分:1)

是的,您可以使用ROW_NUMBER()

UPDATE A SET ID = New_ID FROM (
SELECT 
    ID, 
    ROW_NUMBER() OVER (ORDER BY CASE WHEN ID IS NULL THEN 1 ELSE 0 END, ID) AS New_ID 
    -- The row numbers are ordered by whether ID is null first, then by ID so that the nulls are at the end of the order
    FROM sales
) AS A
WHERE ID IS NULL