前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上工作过。所以,任何经典的解决方案,赞赏
感谢
在SQL服务器你实现这一目标的行为,像这样:
SELECT TOP 6 Empno, Ename, Job, Mgr, Hiredate, Sal FROM Emp ORDER BY NULLIF(Sal, 0) DESC;
为什么downvote? – FreeAsInBeer 2011-04-03 21:36:20
那是我的。我收回它可能有点不必要。 'NVL'不是有效的SQL Server语法。你需要用'NULLIF'替换。 – 2011-04-03 21:37:34
Gotcha。我从来没有使用Oracle数据库,并不确定这是否是某种用户定义的函数。我已经更新了我的答案。 – FreeAsInBeer 2011-04-03 21:42:05
这很容易:
SELECT TOP 100 ....
但是SQL Server中的TOP会给你最近的行数据吗?就像我们如何显示最近的新闻项目一样? – SuperMan 2011-04-03 21:25:21
@ 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);
您的答案包含一个不必要的子查询。 – FreeAsInBeer 2011-04-03 21:27:42
那么主要关注的是TOP N语法 – ChrisWue 2011-04-04 04:53:50
只需使用TOP
在选择获取acording到订单条款第一值,或者如果它doesn't exisits,acording的关键或索引。
SELECT top <n> *
FROM Table1
ORDER BY OrderCol <desc>
如果您搜索了“从SQL Server中排名前N的查询”,前100个结果中的任何一个都可能会给出答案。 – 2011-04-03 21:18:41
然后我还没有加入SO – SuperMan 2011-04-03 21:19:44
@all谢谢你的回答。我不知道它在SQL Server中如此简单。 – SuperMan 2011-04-03 21:30:53