SQL语句直接读取第1条和第100条不就行了

解决方案 »

  1.   

    select top 1 * from table1  --第1条
    select   top  1  *  from   table1 where id not in (select  top  99  id from   table1)  --第100条
      

  2.   

    用sqlAdapter把结果集放到datatable里面然后dt.rows[99]
      

  3.   

    SQL SERVER 2005 支持ROW_NUMBER OVER函数。SELECT *
      FROM ( 
             SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * 
               FROM EMPLOYEE 
           ) T 
     WHERE T.ROWID=1 OR T.ROWID=100 
    SQL SERVER 2000 的话可以用Identity(int, 1, 1)SELECT * 
      FROM (
             SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME 
             FROM EMPLOYEE ORDER BY EMPID
           ) T
     WHERE T.ROWID=1 OR T.ROWID=100
      

  4.   

    1和100,200,300, 400
    那就是1和100的整数倍咯(对100求余数=0)
    SELECT * 
      FROM (
             SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME 
             FROM EMPLOYEE ORDER BY EMPID
           ) T
     WHERE T.ROWID=1 OR T.ROWID%100=0
      

  5.   

    谢谢楼上的 
    但是我不是这个意思啊 我的意思是说我要分别读取第1条,第100条,第200条,第300条,第400条,第500条.... 我怎不能写那么多语句吧--用sql语句写
    如果有主键列id``可以这样:
    select * from 
    (select px=(select count(1) from 表名 where id<a.id)+1 from 表名 a)b
    where px=1 or px%100=0
      

  6.   

    建议先从数据库中将你需要读的数据通过DataAdataper放到一个你自己定义的表中,然后使用表中数据读取方式读取你所需要的记录。速度很快的。
      

  7.   

    请问8楼
    SELECT   *   
        FROM   ( 
                      SELECT   ROWID=IDENTITY(int,1,1)   ,   EMPID,   FNAME,   LNAME   
                      FROM   EMPLOYEE   ORDER   BY   EMPID 
                  )   T 
      WHERE   T.ROWID=1   OR   T.ROWID%100=0 
    中的ROWID EMPID FNAME LNAME等等都分别代表什么呢?谢谢
      

  8.   

    EMPID,FNAME,LNAME是表EMPLOYEE中的字段名,你根据你自己的表进行修改。ROWID就是对记录的一个编号。
      

  9.   

    我改后的语句是SELECT * FROM (SELECT ROWID=IDENTITY(int,1,1),frequency FROM N0_Data ORDER BY frequency ) T WHERE T.ROWID=1 OR T.ROWID%100=0  可是提示:"关键字 'IDENTITY' 附近有语法错误。"请问这是怎么回事啊?谢谢你了
      

  10.   

    谢谢8楼的
    我用SELECT *
      FROM ( 
             SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * 
               FROM EMPLOYEE 
           ) T 
     WHERE T.ROWID=1 OR T.ROWID=100 语句成功了还有一个问题就是我能不能同时得到数据库记录总数呢?(不用COUNT(*))?
      

  11.   


    SELECT   * 
        FROM   (   
                      SELECT   ROW_NUMBER()   OVER   (ORDER   BY   EMPID   ASC)   AS   ROWID,   *, count(*)  AS CNT 
                          FROM   EMPLOYEE   
                  )   T   
      WHERE   T.ROWID=1   OR   T.ROWID=100 
    让每条数据都带上Count,就可以了。
      

  12.   

    我这样的代码显示有错啊SELECT frequency
      FROM ( 
             SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, * ,count(*)  AS CNT 
               FROM N2_Data 
           ) T 
     WHERE T.ROWID=1 OR T.ROWID%10000=0这是怎么回事,不加",count(*)  AS CNT "是对的,加了就有问题了
      

  13.   

    Sql server 2005:
    SELECT
     a.num,
     table1.* 
    FROM
     table1,
     (select id, ROW_NUMBER() over (ORDER BY id) as num from table1) a
    WHERE
      (a.num % 100 =0 or a.num = 1)
     and
      a.id = table1.idPS: ID为你要进行排序的字段
    返回1,100,200,300,400,......10000,......
      

  14.   

    用sql语句也可以,用程序控制也可以
      

  15.   

    程序控制是不是指用sqldatareader啊
    那样我觉得速度不怎么样啊?
      

  16.   

    那么你就当独取一下Count呗。
    或者这样:SELECT   frequency, 
             (
               select count(*) from n2_data
             ) as cnt
        FROM (   
                 SELECT   ROW_NUMBER()   OVER   (ORDER   BY   abstime   ASC)   AS   ROWID, *
                   FROM   N2_Data   
              )   T   
      WHERE   T.ROWID=1   OR   T.ROWID%10000=0
      

  17.   

    谢谢fangxinggood功能是完成了,但是运行的速度好慢啊?
    能不能改进一下加快速度啊,谢谢
      

  18.   

    改进方案:
    1. select count(*) from n2_data 单独拿出来查询一次。(这个是影响速度的关键)
    2. 用WITH关键字,另外不用*了,因为你只要N2_Data中的frequency字段。
      
    WITH T As (
        SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, 
               frequency
          FROM N2_Data
      )
      SELECT frequency
        FROM T
      

  19.   

    select   count(*)   from   n2_data这个查询语句也很耗时啊,能不能改进啊?
      

  20.   

    WITH T As (SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, 
               frequency 
          FROM N2_Data)
      SELECT frequency  FROM T WHERE   T.ROWID=1   OR   T.ROWID%10000=0提示:"关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。"怎么回事啊?麻烦指正!
      

  21.   

    WITH T AS
    (SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, frequency FROM N2_Data)
    SELECT frequency FROM T WHERE T.ROWID=1 OR T.ROWID%10000=0我没有测试环境哦。这个如果不行,你还用子查询方式吧。select count(*) from n2_data 这个如果很慢,那你就应该查查看你这个表有没有建立索引了。
      

  22.   

    回27楼语句在执行的时候提示错误::关键字   'with'   附近有语法错误。如果此语句是公用表表达式或   xmlnamespaces   子句,那么前一个语句必须以分号结尾
    能不能修改一下啊
      

  23.   

    回28楼因为数据量很大,所以用DATATABLE很消耗时间
      

  24.   

    用这个也行了,只要把Count提出去,这个效率也不是很差的。SELECT   frequency
        FROM (   
                 SELECT   ROW_NUMBER()   OVER   (ORDER   BY   abstime   ASC)   AS   ROWID, *
                   FROM   N2_Data   
              )   T   
      WHERE   T.ROWID=1   OR   T.ROWID%10000=0
      

  25.   

    回31楼count提出去是可以的,但是单独运行select count(*) 也是件很消耗时间的事啊有没有什么好的办法改进一下呢
      

  26.   

    你把*号换成主键试试:select count(frequency) from n2_data你现在select count(*)执行多长时间?整个表的数量级是多少?
      

  27.   

    回33楼现在执行count(frequency)
    要一分钟
    共320000条记录