有什麼方法可以選擇,例如,T-SQL(工作MSSQL)中的表的前10行?
我想我在Oracle中看到了一些被定義爲rownum meta變量的東西,用於以下方式 如何從T-SQL中的表中選擇前N行?
select * from Users where rownum<=10但是MSSQL呢?
有什麼方法可以選擇,例如,T-SQL(工作MSSQL)中的表的前10行?
我想我在Oracle中看到了一些被定義爲rownum meta變量的東西,用於以下方式 如何從T-SQL中的表中選擇前N行?
select * from Users where rownum<=10但是MSSQL呢?
select top(@count) * from users
如果@count
是一個常數,你可以刪除括號:
select top 42 * from users
(SQL Server 2000中也對後者的作品,而前者至少需要2005)
您還可以使用的行數,但TOP可能是更好的和更清潔,因此給予好評的邁赫達德
SET ROWCOUNT 10
SELECT * FROM dbo.Orders
WHERE EmployeeID = 5
ORDER BY OrderDate
SET ROWCOUNT 0
這是一種參數化SQL Server 2005之前版本中前N行的方法 – 2009-10-11 23:11:59
試試這個:
SELECT * FROM USERS LIMIT 10;
請記住,這在MSSQL中不起作用,但它在MySql中起作用。 – Jonathan 2013-05-17 13:56:26
您可以使用微軟的ROW_NUMBER()函數來決定哪些行要返回。這意味着你不僅僅侷限於最高X的結果,你可以採取頁面。
SELECT *
FROM (SELECT row_number() over (order by UserID) AS line_no, *
FROM dbo.User) as users
WHERE users.line_no < 10
OR users.line_no BETWEEN 34 and 67
你必須巢原始查詢,但因爲否則你會得到一個錯誤信息,告訴你,你不能在路上做你想要什麼,你應該能夠在一個理想的世界。
Msg 4108, Level 15, State 1, Line 3
Windowed functions can only appear in the SELECT or ORDER BY clauses.
試試這個。
declare @topval int
set @topval = 5 (customized value)
SELECT TOP(@topval) * from your_database
SELECT TOP 10 * FROM TABLE_NAME ORDER BY ORDERED_UNIQUE_COLUMN DESC
ORDERED_UNIQUE_COLUMN可能是你的遞增的主鍵或時間戳
這也是值得關注如果你想在Oracle中取得前10名的成績,你必須寫 select * from(select * from User order by UserName)其中rownum <= 10 Rownum是在排序前先計算的。 – LukLed 2009-10-11 23:57:46
@Lukled當您在mssql中使用row_number()over()時也是如此:http://stackoverflow.com/a/16610654/6910 – Jonathan 2013-05-20 09:36:38