请教大家做统计报表的时候SQL语句都是怎么写的
我最近在做几个报表,用的是ADOQuery+Access+QuickReport
报表的每个空格的数据都是统计出来的,由于统计值为0的时候0不会显示出来,而是显示空的,所以所有的数据都是在报表显示前我自己用SQL统计后赋值过去的,但是我现在写的代码执行速度很慢,好像是ADOQuery在重复open的时候需要消耗大量时间,在记录数为0的时候也是如此,我现在是这样写的,大家看看有没好的办法能够提高执行速度
procedure TBlueCountForm.QRB11;
const
DQ:array [1..12] of string=('锦屏','岳林','溪口','萧王庙','江口','西坞','尚田','大堰','莼湖','裘村','松岙','');
var
i,j:integer;
begin
with DataModule1.ADOQuery_Count do
begin
for i:=1 to 12 do
begin
close;
sql.Clear;
sql.Add('select ');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and DWXZ like "%全民所有%") as QMSY,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and DWXZ like "%集体所有%") as JTSY,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and DWXZ like "%个体所有%") as GTSY,');
sql.Add(' (select sum(SYMJ) from blue where SYZ like "%'+DQ[i]+'%") as SY,');
sql.Add(' (select sum(TTMJ) from blue where SYZ like "%'+DQ[i]+'%") as TT,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and BH like "Q%") as HS,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and BH like "S%") as DS');
sql.Add(' from blue');
open;
for j:=0 to BlueReport11.ComponentCount-1 do
begin
if (BlueReport11.Components[j] is TQRLabel) then
begin
if (BlueReport11.Components[j] as TQRLabel).Name='QMSY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('QMSY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='JTSY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('JTSY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='GTSY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('GTSY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='SY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('SY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='TT'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('TT').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='HS'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('HS').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='DS'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('DS').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='ZS'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('QMSY').AsFloat+FieldByName('JTSY').AsFloat+FieldByName('GTSY').AsFloat);
end;
end;
end;
end;
BlueReport11.PreviewModal;
end;
报表的每个空格的数据都是统计出来的,由于统计值为0的时候0不会显示出来,而是显示空的,所以所有的数据都是在报表显示前我自己用SQL统计后赋值过去的,但是我现在写的代码执行速度很慢,好像是ADOQuery在重复open的时候需要消耗大量时间,在记录数为0的时候也是如此,我现在是这样写的,大家看看有没好的办法能够提高执行速度
procedure TBlueCountForm.QRB11;
const
DQ:array [1..12] of string=('锦屏','岳林','溪口','萧王庙','江口','西坞','尚田','大堰','莼湖','裘村','松岙','');
var
i,j:integer;
begin
with DataModule1.ADOQuery_Count do
begin
for i:=1 to 12 do
begin
close;
sql.Clear;
sql.Add('select ');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and DWXZ like "%全民所有%") as QMSY,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and DWXZ like "%集体所有%") as JTSY,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and DWXZ like "%个体所有%") as GTSY,');
sql.Add(' (select sum(SYMJ) from blue where SYZ like "%'+DQ[i]+'%") as SY,');
sql.Add(' (select sum(TTMJ) from blue where SYZ like "%'+DQ[i]+'%") as TT,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and BH like "Q%") as HS,');
sql.Add(' (select sum(ZMJ) from blue where SYZ like "%'+DQ[i]+'%" and BH like "S%") as DS');
sql.Add(' from blue');
open;
for j:=0 to BlueReport11.ComponentCount-1 do
begin
if (BlueReport11.Components[j] is TQRLabel) then
begin
if (BlueReport11.Components[j] as TQRLabel).Name='QMSY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('QMSY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='JTSY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('JTSY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='GTSY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('GTSY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='SY'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('SY').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='TT'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('TT').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='HS'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('HS').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='DS'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('DS').AsFloat);
if (BlueReport11.Components[j] as TQRLabel).Name='ZS'+IntToStr(i) then
(BlueReport11.Components[j] as TQRLabel).Caption:=FloatToStr(FieldByName('QMSY').AsFloat+FieldByName('JTSY').AsFloat+FieldByName('GTSY').AsFloat);
end;
end;
end;
end;
BlueReport11.PreviewModal;
end;
...全文
相关推荐
自定义报表
自定义报表栏写SQL语句这种方法是通过直接编写SQL查询语句来实现报表的数据提取。SQL(Structured Query Language,结构化查询语言)是用于存取和操作数据库的标准编程语言。
U8编写自定义报表的三种方法
方法一:自定义报表栏写SQL语句在U8系统中,我们可以通过编写SQL语句来创建自定义报表。这种方法相对简单,适用于大多数的报表需求。
金蝶K3_10.3报表开发查询手册
在进行报表开发时,首先需要打开相应的模块查询分析,并选择“查询分析工具”,然后点击“新建”进入创建界面。接下来,用户可以直接在创建界面键入或粘贴已写好的SQL语句。
SQL动态日期列生成并统计
可以使用`GROUP BY`语句配合日期列和统计函数,如`COUNT`、`SUM`、`AVG`等,来达到统计目的。
SQL语句实现对数据库查询结果的行列互换
这种操作在统计分析、报表制作或者数据可视化中非常常见。本篇文章将详细介绍如何通过SQL语句来实现这一目标。首先,我们需要理解SQL的基本查询结构,即SELECT语句。


数据库相关
