2016-02-08 37 views
0

我有一張客戶,產品和排名表。每個客戶最多有5個產品:增加列中的排名值

Customer, Product, Rank 
Cust A, Product 3, 1 
Cust A, Product 7, 2 
Cust A, Product 6, 3 
Cust B, Product 4, 1 
Cust B, Product 6, 3 
Cust B, Product 3, 5 

我刪除了一些行(如Cust B等級2和4)。

我該如何檢查每張客戶的排名(如缺失的2和4),並重新排列它們(因此它們是1,2,3而不是1,3) ,5)

回答

1

首先,您不必更改表中的數據。你可以只使用row_number()功能,當你查詢:

select customer, product, 
     row_number() over (partition by customer order by rank) as rank 
from t; 

如果你使用這種方法,那麼你不必擔心未來的缺失。

好吧,如果你真的想改變數據,一個方法是相關子查詢:

update t 
    set rank = (select count(*) 
       from t t2 
       where t2.customer = t.customer and t2.rank <= t.rank 
       ); 
+0

完美,謝謝! – Adam12344