表如下:名单 质量 数量
小麦 优质 20
大米 一般 20
小麦 优质 50
大米 一般 20
小麦 差 55
DataModule1.AQueryzhanji.Close;
Datamodule1.AQueryzhanji.SQL.Clear;
DataModule1.AQueryzhanji.SQL.Add('select * from 表 order by 日期 DESC'); //查询所有;
DataModule1.AQueryzhanji.Open;DataModule1.AdoQueryGoal.Close;
Datamodule1.AdoQueryGoal.SQL.Clear;
DataModule1.AdoQueryGoal.SQL.Add('select count(*) from 表 where 结果=''优质''');
DataModule1.AdoQueryGoal.Open;
win:=DataModule1.ADOQueryGoal.Fields[0].value; DataModule1.AdoQueryGoal.Close;
Datamodule1.AdoQueryGoal.SQL.Clear;
DataModule1.AdoQueryGoal.SQL.Add('select count(*) from 表 where 结果=''一般''');
DataModule1.AdoQueryGoal.Open;
DataModule1.AdoQuery.Close;
Datamodule1.AdoQuery.SQL.Clear;
DataModule1.AdoQuery.SQL.Add('select count(*) from 表 where 结果='差''');
DataModule1.AdoQuery.Open;分别要计算出优质、差、一般的记录数,用三个QUERY查询,在数据量大时会很慢,甚至出现死机……如何简便?能否有简单的方法?
用下面这个简化的sql这么写为什么不能通过呢?
DataModule1.AdoQuery1.Close;
Datamodule1.AdoQuery1.SQL.Clear;
DataModule1.AdoQuery1.SQL.Add('select q4.cnt as allcnt,q1.cnt as q1cnt,q2.cnt as q2cnt,q3.cnt as q3cnt
from
(select count(*) as cnt from qxkz where qxid=0)as q1,
(select count(*) as cnt from qxkz where qxid=1)as q2,
(select count(*) as cnt from qxkz where qxid=2)as q3,
(select count(*) as cnt from qxkz)as q4
');DataModule1.AdoQuery1.Open;
小麦 优质 20
大米 一般 20
小麦 优质 50
大米 一般 20
小麦 差 55
DataModule1.AQueryzhanji.Close;
Datamodule1.AQueryzhanji.SQL.Clear;
DataModule1.AQueryzhanji.SQL.Add('select * from 表 order by 日期 DESC'); //查询所有;
DataModule1.AQueryzhanji.Open;DataModule1.AdoQueryGoal.Close;
Datamodule1.AdoQueryGoal.SQL.Clear;
DataModule1.AdoQueryGoal.SQL.Add('select count(*) from 表 where 结果=''优质''');
DataModule1.AdoQueryGoal.Open;
win:=DataModule1.ADOQueryGoal.Fields[0].value; DataModule1.AdoQueryGoal.Close;
Datamodule1.AdoQueryGoal.SQL.Clear;
DataModule1.AdoQueryGoal.SQL.Add('select count(*) from 表 where 结果=''一般''');
DataModule1.AdoQueryGoal.Open;
DataModule1.AdoQuery.Close;
Datamodule1.AdoQuery.SQL.Clear;
DataModule1.AdoQuery.SQL.Add('select count(*) from 表 where 结果='差''');
DataModule1.AdoQuery.Open;分别要计算出优质、差、一般的记录数,用三个QUERY查询,在数据量大时会很慢,甚至出现死机……如何简便?能否有简单的方法?
用下面这个简化的sql这么写为什么不能通过呢?
DataModule1.AdoQuery1.Close;
Datamodule1.AdoQuery1.SQL.Clear;
DataModule1.AdoQuery1.SQL.Add('select q4.cnt as allcnt,q1.cnt as q1cnt,q2.cnt as q2cnt,q3.cnt as q3cnt
from
(select count(*) as cnt from qxkz where qxid=0)as q1,
(select count(*) as cnt from qxkz where qxid=1)as q2,
(select count(*) as cnt from qxkz where qxid=2)as q3,
(select count(*) as cnt from qxkz)as q4
');DataModule1.AdoQuery1.Open;
查询结束后ADOQRERY.enabledcontry;
使用SQLSERVER2000环境,
用查询分析器,对我的qxkz表中的qxid分别为0,1,2的记录数进行了统计,
输出结果正确。
不知道你的为什么不能用,
你用的是SQLServer的数据库吗?我给一份程序,你看看能不能通过,(适用于SQLServer2000环境)
DataModule1.AdoQuery1.Close;
Datamodule1.AdoQuery1.SQL.Clear;
DataModule1.AdoQuery1.SQL.Add('select q4.cnt as allcnt,q1.cnt as q1cnt,q2.cnt '+
' as q2cnt,q3.cnt as q3cnt from '+
' (select count(*) as cnt from [表] where [结果]=''优质'')as q1, '+
' (select count(*) as cnt from [表] where [结果]=''一般'')as q2, '+
' (select count(*) as cnt from [表] where [结果]=''差'')as q3, '+
' (select count(*) as cnt from [表])as q4 ');
DataModule1.AdoQuery1.Open;
这样,allcnt返回总记录数,q1cnt返回优质记录数,q2cnt返回一般记录数,q3cnt返回差记录数。当然了,如果用SQLSERVER2000,还可以把这个工作放在服务器端执行,用存储过程返回结果。
group by 结果
或
select 质量,count(*) from table group by 质量