SQL Server 2008
本人写了好几年SQL语句了,从来没注意到这件事情。
例如:
数据表如下:
ID EMPNO NAME AGE
1 26929 Jerome 28
2 28394 Quince 27
3 20983 Green 30
4 27189 Mike 30
5 23167 Arishy 30
6 26371 Yager 29
我写了SQL语句想取得第3、4笔数据,测试分页玩的。
select top 2 * from (select top 4 * from Member ) m order by m.RowID desc
我执行中间那一段子查询:select top 4 * from Member
取得的是:
1 26929 Jerome 28
2 28394 Quince 27
3 20983 Green 30
4 27189 Mike 30
但是整个SQL语句的结果却是:
5 23167 Arishy 30
6 26371 Yager 29
真的不知道到底怎么会出现这种情况,请高手指教。
select top 2 * from (select top 4 * from Member order by m.RowID asc) m order by m.RowID desc
就是你想要的结果
之所以会出现这种情况 你记住 TOP 4 随机返回 4 行 只有在你指定了 order by 之后才是有序的返回你所要的行
这点很重要
t-sql?既然都08了,用哪个Row_Number函数吧。。。
楼上说的正确,在子查询里面也要 order by (asc) 排序一下,否则会返回整个表的最后的2行数据
我实验了一下,发现一些东东:top似乎是最后执行的,所有记录Order by 后再用top选取排好序的记录。