Jen

Row_Number(),Rank() 簡單應用

大家好,懶人筆記本又來了

 

今天將要被記的就是,在SQL裏面要查成績排名,

 

有怎樣的方式可以寫呢?

 

1.ROW_NUMBER()

 
SELECT 
  ROW_NUMBER() OVER(ORDER BY 分數 DESC) as '排名',
  SCORE
FROM table1
挑出來像這樣,
1 

 

2.RANK()

SELECT 
   RANK() OVER(ORDER BY 分數 DESC) as '排名',SCORE
FROM table1
這個挑出來像這樣
2 

 

看得出來差別吧…應該還有一種才對,讓我想想.

 

例子.

例如你要在新增某人的新成績之後查看他的成績排名,

 

可以寫一個簡單的Store Procedure,這樣也可以省很多寫程式的麻煩,

 

就像…

CREATE PROCEDURE 取得排名
	@姓名 NVARCHAR(MAX),
	@分數 INT
AS
BEGIN
	DECLARE @InsertID int;
	INSERT INTO Table1
			   (姓名,分數)
		 VALUES
			   (@姓名,@分數);
	SELECT @InsertID = SCOPE_IDENTITY();

	SELECT 排名, 分數  FROM
	(
		SELECT Row_Number() OVER(ORDER BY 分數 DESC) as '排名',*
		FROM table1
	) as temp1
	WHERE Id = SCOPE_IDENTITY()
END

 

可參考MSDN的介紹.

Row_Number()

Rank()

 

 

後記…

最近總想到保哥以前的一句話,

SQL Server 明明就有支援中文,為什麼硬要去用英文搞自已呢!> <”

0 意見: