我想用SQL语句对一组记录进行排序,然后在这组已排序的记录中提取前n条记录
  我的语句是:
   select top n * from 表名
   where  字段名1    in  
  (select  字段名1   from  表名
   where   字段名=常量
    orderby   字段名2)
   语句运行时出错,请帮我看一下错在哪里,有更好的语句请赐教!!!!

解决方案 »

  1.   

    你把“orderby   字段名2”写在括号外面吧
      

  2.   

    order by 应该在 Select 的最外面一层。   select top n * from 表名
       where  字段名1    in  
      (select  字段名1   from  表名
       where   字段名=常量)
        orderby   字段名2
      

  3.   

    select top n * from 表名
       where  字段名1    in  
      (select  字段名1   from  表名
       where   字段名=常量
        ) orderby   字段名2
      

  4.   

    先说是什么错误,是操作符丢失还是类型不匹配或是ODBC报错?
    这个表达式有很多错误,我调试的时候
      

  5.   

    惨,怎么改都过不了form1.ADOConnection1.Connected;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select top 2  * from user');
    //adoquery1.SQL.Add('where article=1');
    adoquery1.SQL.Add('where username in');
    adoquery1.SQL.Add('(select username form admin');
    adoquery1.SQL.Add('where admin.username=fyol)');
    //adoquery1.SQL.Add('order by userid');
    adoquery1.Open;
      

  6.   

    没关系的,拿起SQL看看,会有新发现的
      

  7.   

    我把order by 放在 select的最外一层,问题解决了谢谢楼上的各位!
     select top n * from 表名
       where  字段名1    in  
      (select  字段名1   from  表名
       where   字段名 like '01%')
       orderby   字段名2
    我把以上SQL语句分行加入ADOQuery里面,可是程序出错.一下是程序
    ADOQuery1.close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add( 'select top n * from 表名')
    ADOQuery1.SQL.Add( 'where  字段名1    in  ')
    ADOQuery1.SQL.Add( '(select  字段名1   from  表名')
    ADOQuery1.SQL.Add('where   字段名 like '01%')')
    ADOQuery1.SQL.Add('orderby   字段名2')
    ADOQuery1.open;
    编译时指出ADOQuery1.SQL.Add('where   字段名 like '01%')')有误,
    出错提示: missing operator or semicolon
    这段程序该如何改 
      

  8.   

    好像在dephi的环境下不能执行这么多的sql语句把
    你可以在数据库里面建立一个存储过程,然后在dephi中调用这个过程应该就好使了把
      

  9.   

    呵呵,同意 
    select top n * from 表名
       where  字段名1    in  
      (select  字段名1   from  表名
       where   字段名=常量
        ) orderby   字段名2