2011-03-23 81 views
0

我想在X table更新一個名爲Rank的列,其中erank將是一個叫annual sales列的排名,而被使用row_number() over (order by annual sales desc)計算,並且因爲這是一個功能,因此它不能用於更新,因爲它只應選擇條款的一部分,所以我們寫了這樣的事情:ROW_NUMBER函數

UPDATE X 
    SET rank = SELECT acc_id, 
        annual_call, 
        ROW_NUMBER() OVER (ORDER BY annual sales DESC) 
       FROM x 
      GROUP BY acc_id,annual_call 

但這引發錯誤

+0

你可以發佈錯誤文字嗎? – Zannjaminderson 2011-03-23 04:49:36

回答

4

作爲一般規則,當你問一個問題,你提到的錯誤,說什麼錯誤。它幫助我們來幫助你,你不必使它成爲一個神祕小說......

這裏是你如何做到這一點:

with cte as (
select [rank], row_number() over (
    partition by acc_id, annual_call 
    order by [annual sales] desc) as [row_number] 
from x) 
update cte 
set [rank] = [row_number]; 

當然,堅持這樣的排名,因爲它會通常是註定在第一次更新後變得不正確,但這是一個不同的主題。

0

這裏同時

set rank = select acc_id,annual_call,row_number() 
over (order by annual sales desc) 
from x 

只能選擇1列,必須實現這個其他一些邏輯。因爲分配值必須只返回一列。