前N个查询 - SQL Server 2008

前N个查询 - SQL Server 2008

问题描述:

我如何从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

在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

这很容易:

SELECT TOP 100 .... 
+0

但是SQL Server中的TOP会给你最近的行数据吗?就像我们如何显示最近的新闻项目一样? – SuperMan 2011-04-03 21:25:21

+0

@ user9009:只需通过CreatedDate desc添加订单即可获取最新商品 – 2011-04-03 21:26:43

你可以尝试

select top <n> .... 

我想你正在寻找的是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

只需使用TOP在选择获取acording到订单条款第一值,或者如果它doesn't exisits,acording的关键或索引。

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