使用SQL Server查詢語句選取前N行數(shù)據(jù)
使用SQL Server查詢語句可以實現(xiàn)多種查詢,下面為您介紹的SQL Server查詢語句可以實現(xiàn)選取前N行數(shù)據(jù),希望對您能有所幫助。
在默認情況下,SQL Server將返回select語句所查詢到的所有行。而使用可選的top選項可以指定返回的行數(shù)。
Top通常與order by 配合工作,order by可以控制哪些行應當排在前面,當然,沒有order by子句top也可以正常工作,不過返回的沒有排序的的結果集合中的前N行數(shù)據(jù)。
例如我們有下面這張表:
ID Name Age
1 aa 15
2 bb 20
3 cc 25
4 dd 30
5 ee 20
6 ff 20
要查找年齡最小的前3個人,寫如下SQL Server查詢語句:
SELECT TOP 3 *
FROM StuList
ORDER BY Age
返回結果集為:
1 aa 15
2 bb 20
5 ee 20
這個SQL Server查詢語句看起來很清晰,結果也不錯,但是很不幸,它是錯誤的,因為有3個記錄的年齡都是20,要解決這個問題,可以使用with ties選項。
對于top關鍵詞來說,with ties選項很重要,它可以在top返回的結果之后附加多個行,這些行與top返回的結果集***一行在order by子句指定的排序列上具有相同的值。
下面是修改后的代碼:
SELECT TOP 3 WITH TIES *
FROM StuList
ORDER BY Age
返回結果集為:
1 aa 15
2 bb 20
5 ee 20
6 ff 20
對照表的內容我們發(fā)現(xiàn),這樣的返回結果就是正確的了。
在select語句中必須寫名top應當返回的行數(shù)量或者百分比,不能使用變量或者表達式來替代top中的數(shù)字和百分比。
返回限定行數(shù)的另一種方法是對rowcount全局變量進行設置,要取消rowcount的限制作用,可以將它設置為0。
例如:
SET ROWCOUNT 3
SELECT *
FROM StuList
ORDER BY Age
這樣也會返回3行結果,但是它沒有with ties選項,所以仍然可能會生成不完整的結果。
注意:Top是Microsoft T-SQL 對ANSI SQL的擴展,是不可移植的。如果必須將數(shù)據(jù)庫移植到另一個數(shù)據(jù)庫平臺,使用top就會帶來轉換上的麻煩。相反,rowcount變量是可以移植的。
【編輯推薦】