请教Sql语句问题!请大侠们不吝赐教!

sunrainy2011 2012-05-09 09:52:30
我的窗体上有一个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 管辖地 ';
我只能写成这个样,排名的列不知道怎么写。


...全文
195 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunrainy2011 2012-05-15
  • 打赏
  • 举报
回复
谢谢,问题解决了。谢谢大家为我的问题这么费心!
sunrainy2011 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
选中adoquery1,右击-FILTEREDIT,选中FILED,是字段的ONGETTEXT事件,不是adoquery1的事件
[/Quote]

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里的数据读出来呢?又怎么写进去呢?
我看见佛 2012-05-10
  • 打赏
  • 举报
回复
选中adoquery1,右击-FILTEREDIT,选中FILED,是字段的ONGETTEXT事件,不是adoquery1的事件
sunrainy2011 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
用dbgrideh显示吗?
设置optionseh->dghShowRecno为True, 直接看到排名了
[/Quote]
用dbgrid显示 不是dbgrideh
sunrainy2011 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
选中adoquery1,右击-FILTEREDIT-new filed,设置NAME,类型为INTEGER,FILEDTYPE为中间CALCU..

Delphi(Pascal) code

procedure TForm1.ADOQuery1sssGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
be……
[/Quote]
没找到ADOQuery1的ongettext事件
sunrainy2011 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
选中adoquery1,右击-FILTEREDIT,选中FILED,是字段的ONGETTEXT事件,不是adoquery1的事件
[/Quote] adoquery1右键菜单 里有fields editor,没有你说的filteredit;点击fields editor出现的form2.ADOQuery1中点右键,可以add fields\new fields……
我看见佛 2012-05-09
  • 打赏
  • 举报
回复
排名有点类似于加个行号的意思
通过IDENTITY可以解决,记录SQL SERVER2000要用到临时表,SQL SERVER 2005以上不用。不知道你的是哪个?
kaikai_kk 2012-05-09
  • 打赏
  • 举报
回复
用dbgrideh显示吗?
设置optionseh->dghShowRecno为True, 直接看到排名了
我看见佛 2012-05-09
  • 打赏
  • 举报
回复
选中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事件上加上
sunrainy2011 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
那可以写在DELPHI里呀,排序后,添加一个计算栏位。根据RECNO来取得排名

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

怎么添加计算栏位?
sunrainy2011 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
那可以写在DELPHI里呀,排序后,添加一个计算栏位。根据RECNO来取得排名
[/Quote]
这个是怎么做的呀?怎么能得到已经写在Dbgrid里的值呢?
我看见佛 2012-05-09
  • 打赏
  • 举报
回复
那可以写在DELPHI里呀,排序后,添加一个计算栏位。根据RECNO来取得排名
sunrainy2011 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
sql:='select 管辖地,count(管辖地) as 数量 from basictab where 上访地点='+quotedstr(edit1.Text)+' group by 管辖地 order by 2';
[/Quote]

这个我能实现 ,不能解决的是 怎么再加上一列排名,这个排名根绝数量的多少来判断
proponent_hc 2012-05-09
  • 打赏
  • 举报
回复
sql:='select 管辖地,count(管辖地) as 数量 from basictab where 上访地点='+quotedstr(edit1.Text)+' group by 管辖地 order by 2';
sunrainy2011 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
排名有点类似于加个行号的意思
通过IDENTITY可以解决,记录SQL SERVER2000要用到临时表,SQL SERVER 2005以上不用。不知道你的是哪个?
[/Quote]
谢谢你!我用的是access2003+delphi 这个要怎么解决呀?

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧