2011-04-03 45 views
2

我如何從SQL Server返回前N個查詢。我知道它是如何在甲骨文前N個查詢 - SQL Server 2008

SELECT Empno, Ename, Job, Mgr, Hiredate, Sal FROM (SELECT Empno, Ename, Job, Mgr, Hiredate, Sal FROM Emp ORDER BY NVL(Sal, 0) DESC) WHERE ROWNUM < 6;

做,但如何寫在SQL Server相同的查詢?我從來沒有在SQL Server上工作過。所以,任何經典的解決方案,讚賞

感謝

+1

如果您搜索了「從SQL Server中排名前N的查詢」,前100個結果中的任何一個都可能會給出答案。 – 2011-04-03 21:18:41

+0

然後我還沒有加入SO – SuperMan 2011-04-03 21:19:44

+0

@all謝謝你的回答。我不知道它在SQL Server中如此簡單。 – SuperMan 2011-04-03 21:30:53

回答

3

在SQL服務器你實現這一目標的行爲,像這樣:

SELECT TOP 6 Empno, Ename, Job, Mgr, Hiredate, Sal FROM Emp ORDER BY NULLIF(Sal, 0) DESC; 
+0

爲什麼downvote? – FreeAsInBeer 2011-04-03 21:36:20

+1

那是我的。我收回它可能有點不必要。 'NVL'不是有效的SQL Server語法。你需要用'NULLIF'替換。 – 2011-04-03 21:37:34

+2

Gotcha。我從來沒有使用Oracle數據庫,並不確定這是否是某種用戶定義的函數。我已經更新了我的答案。 – FreeAsInBeer 2011-04-03 21:42:05

1

這很容易:

SELECT TOP 100 .... 
+0

但是SQL Server中的TOP會給你最近的行數據嗎?就像我們如何顯示最近的新聞項目一樣? – SuperMan 2011-04-03 21:25:21

+0

@ user9009:只需通過CreatedDate desc添加訂單即可獲取最新商品 – 2011-04-03 21:26:43

1

你可以嘗試

select top <n> .... 
1

我想你正在尋找的是select top N,像這樣:

SELECT TOP 6 Empno, Ename, Job, Mgr, Hiredate, Sal FROM (SELECT Empno, Ename, Job, Mgr, Hiredate, Sal FROM Emp ORDER BY NVL(Sal, 0) DESC); 
+0

您的答案包含一個不必要的子查詢。 – FreeAsInBeer 2011-04-03 21:27:42

+0

那麼主要關注的是TOP N語法 – ChrisWue 2011-04-04 04:53:50

1

只需使用TOP在選擇獲取acording到訂單條款第一值,或者如果它doesn't exisits,acording的關鍵或索引。

SELECT top <n> * 
FROM Table1 
ORDER BY OrderCol <desc>