我的窗体上有一个combobox1数据库中有表 字段1 管辖地  字段2  办事地点  还有别的字段就不一一列举了 如下管辖地      办事地点        ……
辽宁       北京办事处
吉林       大连办事处
黑龙江     天津办事处
内蒙古     大连办事处     
辽宁       大连办事处
广东       天津办事处 
天津       ……
北京
……
我的combobox1是办事地点  办事地点总共3个  北京办事处 、大连办事处、天津办事处; 管辖地也是固定的10多个。我想统计一下 属于这些管辖地的人去这些办事地点的次数   并按次数多少排名通过select 查询在dbgrid里显示出来  显示结果想成为这个样子管辖地               次数          排名(所有的管辖地) (就是人员去      按照次数排名    
                  combobox1里       如果次数相同
                  选择的办事        则排名相同
                  地点的次数)      如:1,2,2,4……我想请教一下这个该怎么写sql语句?我写了一下但是都不能实现排名,我是这样写的:
sql:='select 管辖地,count(管辖地) as 数量 from basictab where 上访地点='+quotedstr(edit1.Text)+' group by 管辖地 ';
我只能写成这个样,排名的列不知道怎么写。
     

解决方案 »

  1.   

    排名有点类似于加个行号的意思
    通过IDENTITY可以解决,记录SQL SERVER2000要用到临时表,SQL SERVER 2005以上不用。不知道你的是哪个?
      

  2.   

    谢谢你!我用的是access2003+delphi 这个要怎么解决呀?
      

  3.   

    sql:='select 管辖地,count(管辖地) as 数量 from basictab where 上访地点='+quotedstr(edit1.Text)+' group by 管辖地 order by 2';
      

  4.   

    那可以写在DELPHI里呀,排序后,添加一个计算栏位。根据RECNO来取得排名
      

  5.   

    这个是怎么做的呀?怎么能得到已经写在Dbgrid里的值呢?
      

  6.   

    选中adoquery1,右击-FILTEREDIT-new filed,设置NAME,类型为INTEGER,FILEDTYPE为中间CALCU..
    procedure TForm1.ADOQuery1sssGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
    Text := IntToStr(ADOQuery1.recno);
    end;onGetText事件上加上
      

  7.   

    用dbgrideh显示吗?
    设置optionseh->dghShowRecno为True, 直接看到排名了
      

  8.   

    用dbgrid显示   不是dbgrideh
      

  9.   

    选中adoquery1,右击-FILTEREDIT,选中FILED,是字段的ONGETTEXT事件,不是adoquery1的事件
      

  10.   


    if sql<>'' then
      begin //A
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add(sql);
        ADOQuery1.Open;
        if  ADOQuery1.Fields[0].Value=null then
       begin
         for i:=0 to dbgrid1.Columns.Count-1 do
         begin
           DbGrid1.Fields[i].DisplayWidth:=10 ;
         end;
         showmessage('对不起,没有您要查的记录');
       end
       else
       begin
       ADOQuery1.Fields[0].Alignment:=tacenter;
       ADOQuery1.Fields[0].DisplayWidth:=20;
       ADOQuery1.Fields[1].Alignment:=tacenter;
       ADOQuery1.Fields[1].DisplayWidth:=20;
       end;我自己这么写的  按照你说的那个办法 我这里查不出来记录,我想接着这个在dbgrid1里添一列,按着数量的多少,可是怎么才能把写入到dbgrid里的数据读出来呢?又怎么写进去呢?
      

  11.   

       adoquery1右键菜单 里有fields editor,没有你说的filteredit;点击fields editor出现的form2.ADOQuery1中点右键,可以add fields\new fields……