2015-12-10 27 views
0

排名計算下面我有要求在SQL SERVER

enter image description here

我使用的條件一樣rank() (partition by Name order by sum(marks)) as rank,我得到的等級值作爲Rank_Coming列,但我期待像預期的排名列中的值。

請建議如何實現這一

感謝

回答

1

你排名想到的是GROUP BY Name -- PARTITION BY Name。這是ORDER BY Name

試試這個:

DENSE_RANK() OVER(ORDER BY Name) 
+0

非常感謝你的答覆,但它是直接跳轉到3,沒有顯示2,我需要顯示兩個下一行,2處缺失我的結果 –

+0

您使用'DENSE_RANK()'而不是'RANK()'。我剛剛修復了我的代碼 –

+0

但在我的情況下,它應該是由商標和名稱組成的,這個代碼按照字母順序排列名稱,而不考慮商標,請問您能建議做什麼 –

1

你需要得到SUM第一,然後使用該排名。

;WITH CteSum AS(
    SELECT *, 
     SumMarks = SUM(Marks) OVER(PARTITION BY Name) 
    FROM tbl 
), 
CteRnk AS(
    SELECT *, 
     rnk = DENSE_RANK() OVER(ORDER BY SumMarks DESC) 
    FROM CteSum 
) 
SELECT * FROM CteRnk