B
bbcock
Unregistered / Unconfirmed
GUEST, unregistred user!
我有3个表分别是设备表(id,设备编号,设备名称),部门表(id,部门编号,部门名称),设备配发表(设备id,部门id),我想查询统计出如下结果:
总公司 第一分公司 部门1 部门2 部门3 第二分公司 部门1 部门2
所有设备 10 6 3 2 1 4 2 2
a类设备 8 5 2 2 1 3 2 1
计算机 3 1 1 0 0 1 1 0
打印机 3 1 1 0 0 1 0 1
传真机 2 1 0 1 0 1 1 0
扫描仪 2 2 0 1 1 0 0 0
b类设备 2 1 1 0 0 1 0 1
空调 1 1 1 0 0 1 0 1
电扇 1 0 0 0 0 0 0 0
我现在是这么做的
1,把设备表的所有记录按编号顺序查询出来adoquery1
2,把部门表的所有记录按编号顺序查询出来adoquery2
3,嵌套循环
adoquery2.First;
for i:=1 to adoquery2.recordcount do
begin
bmbh:= ADOQuery2.FieldValues['部门编号'];
ADOQuery1.First ;
While Not ADOQuery1.Eof Do
Begin
sbbh:= ADOQuery1.FieldValues['设备编号'];
sqlstr:='select count(*) as 数量 from 设备表 as a,部门表 as b,设备配发表 as c where a.id=c.id and b.id=c.id and a.设备编号 like'''+sbbh+'%'+''''+' and b.部门编号 like'''+bmbh+'%'+''''
with adoquery3 do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
end;
得到数量
Adoquery1.Next ;
end;
Adoquery2.Next ;
end;
这样做统计速度奇慢,有什么好办法可以加快统计速度吗?
总公司 第一分公司 部门1 部门2 部门3 第二分公司 部门1 部门2
所有设备 10 6 3 2 1 4 2 2
a类设备 8 5 2 2 1 3 2 1
计算机 3 1 1 0 0 1 1 0
打印机 3 1 1 0 0 1 0 1
传真机 2 1 0 1 0 1 1 0
扫描仪 2 2 0 1 1 0 0 0
b类设备 2 1 1 0 0 1 0 1
空调 1 1 1 0 0 1 0 1
电扇 1 0 0 0 0 0 0 0
我现在是这么做的
1,把设备表的所有记录按编号顺序查询出来adoquery1
2,把部门表的所有记录按编号顺序查询出来adoquery2
3,嵌套循环
adoquery2.First;
for i:=1 to adoquery2.recordcount do
begin
bmbh:= ADOQuery2.FieldValues['部门编号'];
ADOQuery1.First ;
While Not ADOQuery1.Eof Do
Begin
sbbh:= ADOQuery1.FieldValues['设备编号'];
sqlstr:='select count(*) as 数量 from 设备表 as a,部门表 as b,设备配发表 as c where a.id=c.id and b.id=c.id and a.设备编号 like'''+sbbh+'%'+''''+' and b.部门编号 like'''+bmbh+'%'+''''
with adoquery3 do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
end;
得到数量
Adoquery1.Next ;
end;
Adoquery2.Next ;
end;
这样做统计速度奇慢,有什么好办法可以加快统计速度吗?