反向分区

时间:2012-09-13 20:23:07

标签: 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

我想像这样更新产品ID:

Sku ProductCode Product Id
01     11011         01
02     11021         02
03     11021         02
04     11011         01
05     11031         03
06     11041         04

我正在使用此查询:

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

基本上我只想在不同的情况下才算数。没有使用任何功能或过程的任何想法?连续陈述很好,更多专栏也是如此。

1 个答案:

答案 0 :(得分:4)

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

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