关于分段取数据的问题,如下:
字段:FID    FName       按FName排序:FID    FName
      1      B                        2      A
      2      A                        6      A
      3      B                        9      A
      4      C                        10     A
      5      B                        1      B
      6      A                        3      B
      7      B                        5      B
      8      C                        7      B
      9      A                        4      C
      10     A                        8      C
分段取数据,每次3条记录:
第一次:
FID    FName
2      A
6      A
9      A
第二次:
10     A
1      B
3      B
第三次:
5      B
7      B
4      C
第四次:
8      C
请问各位如何实现?

解决方案 »

  1.   

    你试试这个,不一定行:
    set rowcount 3
    select FID , FName from table 
    where ....
    order by
    union 
    set rowcount 3
    select FID , FName from table 
    where ....
    order by 1
    union
    set rowcount 3
    select FID , FName from table 
    where ....
    order by 1
      

  2.   

    转贴:
    declare @SQLStr varchar(8000)
    set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
    exec(@SQLStr)自己再改造改造
      

  3.   

    先看看我的做法:
    第一次
    select * from
    (select * from Table order by FName)
    where rownum<=3
    minus
    select * from
    (select * from Table order by FName)
    where rownum<=0
    第二次
    select * from
    (select * from Table order by FName)
    where rownum<=6
    minus
    select * from
    (select * from Table order by FName)
    where rownum<=3
    依此类推
      

  4.   

    var
      count;
    begin
    count :=0;
    while not adoquery1.eof do
    begin
      with adoquery1 do
      begin
        ......
      end;
      inc(count);
      if count=20 then break;
    end;
    end;
      

  5.   

    to firetoucher(风焱) :
    ???
      

  6.   

    http://expert.csdn.net/Expert/topic/1920/1920595.xml?temp=6.344241E-02
      

  7.   

    就想delphi的SQL Explorer一样,当执行 select * from table1的时候,如果Table1有数十万条记录,一次只会取回几十条记录,当滚动条下移时,再取下几十条记录,直到取完所有记录。有谁知道是如何实现的么?
      

  8.   

    我是在com+组件里实现这个功能,必须是无状态的,不能用ClientDataSet.
      

  9.   

    就像delphi的SQL Explorer一样,当执行 select * from table1的时候,如果Table1有数十万条记录,一次只会取回几十条记录,当滚动条下移时,再取下几十条记录,直到取完所有记录。有谁知道是如何实现的么?
      

  10.   

    使用ClientDataSet,也可以自己写代码维护服务器状态信息,使用应用服务器成为无状态对象
      

  11.   

    你那儿没有李维的《Delphi 5.X分布式多层应用系统篇》吗,第五章有
      

  12.   

    《Delphi 5.X分布式多层应用系统篇》第五章的做法并不适用于此。