日期:2014-05-19  浏览次数:20402 次

我想查询从第10行开始的10条记录
如何查   但我也没有关类式   ID   这样的字段

------解决方案--------------------
没有主键是不行的.
------解决方案--------------------
给个示例吧
--取8.9.10三行记录的方法,前提,编号是主键才行

select top 3 *
from gzda a
where 编号 in (select top 7 编号 from gzda order by 编号 desc)
order by 编号 desc

------解决方案--------------------
如果确实没有主键,那么只能取到临时表中,加个自增列字段.
------解决方案--------------------
增加一个自增列
select top 10 * from 表
where 自增列字段 not in (select top 10 自增列字段 from 表)
------解决方案--------------------
select identity(int,1,1) as rowindex,* into #tmp from employees
select top 10 * from #tmp where rowindex not in (select top 10 rowindex from #tmp)
------解决方案--------------------


--第一种方法
--第11条到第20条,共选出10条记录
select *
from (select top 10 * from (select top 20 * from 表名 order by ID) t1 order by ID desc) t2
order by ID


--第二种方法
--第11条到第20条,共选出10条记录
select top 10 *
from 表名
where ID> (select max(ID) from (select top 10 ID from 表名 order by ID) t1)
order by ID



------解决方案--------------------
select top 10 * from AA A where A.aID not in (select top 9 aID from AA B )
------解决方案--------------------
主键是最低要求.
假设你前20条记录都一样,那么会取出什么样的结果?
------解决方案--------------------
试试这样:
Create Table MyTable (
Column1 int null,
Column2 int null,
Column3 int null,
Column4 int null
)

Declare @Count int
Declare @ColumnValue varchar(20)
Set @Count = 1
While(@Count <=50)
Begin
Insert Into MyTable Values (@Count,@Count,@Count,@Count)
Set @Count = @Count + 1
End

Select * From (Select * , ROW_NUMBER() OVER (Order By Column1) As ID From MyTable
) As T
Where T.Pos> =10 And T.Pos <=20

drop Table MyTable

-----------------
Column1 Column2 Column3 Column4 ID
10 10 10 10 10
11 11 11 11 11
12 12 12 12 12
13 13 13 13 13
14 14 14 14 14
15 15 15 15 15
16 16 16 16 16
17 17 17 17 17
18 18 18 18 18
19 19 19 19 19
20 20 20 20 20
------解决方案--------------------
Where T.Pos> =10 And T.Pos <=20 改成 Where T.ID> =10 And T.ID <=20