反向分区

Shy*_*kin 3 sql sql-server-2008

所以我在这样一张桌子上工作:

Sku ProductCode Product Id
01     11011         null
02     11021         null
03     11021         null
04     11011         null
05     11031         null
06     11041         null
Run Code Online (Sandbox Code Playgroud)

我想像这样更新产品 ID:

Sku ProductCode Product Id
01     11011         01
02     11021         02
03     11021         02
04     11011         01
05     11031         03
06     11041         04
Run Code Online (Sandbox Code Playgroud)

我正在使用这个查询:

with upd  
as  
(  
SELECT *, ROW_NUMBER() OVER (PARTITION BY [Product Code] ORDER BY [Product Code]) AS rnk  
FROM temp  
)  
UPDATE upd  
SET ProductId = rnk
Run Code Online (Sandbox Code Playgroud)

基本上我只想在它不同时才计数。不使用任何函数或过程的任何想法?连续语句很好,更多列也是如此。

Gor*_*off 5

你想使用dense_rank() 函数而不是row_number():

with upd  as  
     (SELECT *,
             dense_rank() OVER (ORDER BY [Product Code]) AS rnk  
      FROM temp  
     )  
UPDATE upd  
    SET ProductId = rnk
Run Code Online (Sandbox Code Playgroud)