再次提问:如何创建交叉统计报表。十万火急!!!!!!

zoao 2000-03-16 05:09:00
如何利用TQuery创建交叉统计报表。
敬请帮助?
...全文
365 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
douh 2000-03-28
  • 打赏
  • 举报
回复
什么交叉统计报表?见没见过Decision Cube我想这才是你想要的,在Delphi企业版中找!
蝈蝈俊 2000-03-17
  • 打赏
  • 举报
回复
利用sql查出数据,再把数据填充到Tstringgrid中
下面是我在给一个医院开发的门诊系统中的一个范列,可能有些垃圾.
sql语句:
SELECT KSXX."KSBM" as KSBM,YSXX."GH" as GH, YJKS."KSBM" as FPLB,sum( Sfhjmx."JE" ) as JE, MAX(KSXX."KSMC") as KSMC,MAX(YSXX."YSXM") as YSXM,MAX(YJKS."KSMC") as FPMC
FROM "SFMXZ.DB" Sfmxz ,"Sfhjmx.DB" Sfhjmx ,
"Hjsf.DB" Hjsf , "YSXX.DB" YSXX ,
"KSXX.DB" KSXX,"KSXX.DB" YJKS,"JCXM.DB" JCXM
WHERE ( YSXX.KSBM = KSXX.KSBM ) AND ( Sfhjmx.YSBM = YSXX.GH )
AND ( Sfmxz.DJH = Hjsf.Hjsfh ) AND ( Sfhjmx.JCBM = JCXM.JCBM )
AND ( JCXM.KSBM = YJKS.KSBM ) AND ( Sfmxz.SFLB = '划价' )
AND ( Sfmxz.JZBZ = 'J' ) AND ( Sfhjmx.Hjsfh = Hjsf.Hjsfh )
AND ( Sfmxz.RQ >= :QSRQ ) AND ( Sfmxz.RQ <=:ZZRQ )
AND ( Hjsf.TPBZ ='' )
GROUP BY
KSXX."KSBM" ,YSXX."GH",YJKS."KSBM"
把数据写入Tstringgrid的代码:
procedure TKSXYMXForm.FormActivate(Sender: TObject);
var
KSBM,YSBM : string;
I, J: Integer;
JEXJ , JEHJ : Double;
begin
KSYSXMQuery.ParamByName('QSRQ').AsDateTime := QSRQ;
KSYSXMQuery.ParamByName('ZZRQ').AsDateTime := ZZRQ;
KSYSXMQuery.Close;
KSYSXMQuery.Open;
if KSYSXMQuery.RecordCount < 1 then Exit;
KSYSXMQuery.First;
KSBM := '';
YSBM := '';
I := 1;
StringGrid1.Cells[0,0] := '门诊科室';
StringGrid1.Cells[1,0] := '医生-医技科室';
while not KSYSXMQuery.Eof do begin
if not ((KSBM = KSYSXMQuery.FieldByName('KSBM').AsString) and
(YSBM = KSYSXMQuery.FieldByName('GH').AsString)) then
begin
if (I > 1) and (KSBM <> KSYSXMQuery.FieldByName('KSBM').AsString)then begin
StringGrid1.RowCount := StringGrid1.RowCount +1;
I := I + 1;
StringGrid1.Cells[1,I-1] := '小计';
end;
StringGrid1.RowCount := StringGrid1.RowCount +1;
I := I + 1;
if not (KSBM = KSYSXMQuery.FieldByName('KSBM').AsString) then begin
KSBM := KSYSXMQuery.FieldByName('KSBM').AsString;
StringGrid1.Cells[0,I-1] := KSYSXMQuery.FieldByName('KSMC').AsString;
end;
if not (YSBM = KSYSXMQuery.FieldByName('GH').AsString) then begin
YSBM := KSYSXMQuery.FieldByName('GH').AsString;
StringGrid1.Cells[1,I-1] := KSYSXMQuery.FieldByName('YSXM').AsString;
end;
end;
J := 2;
while True do begin
if StringGrid1.ColCount > J then begin
if StringGrid1.Cells[J,0] = KSYSXMQuery.FieldByName('FPMC').AsString then begin
StringGrid1.Cells[J,I-1] := FloatToMyStr(KSYSXMQuery.FieldByName('JE').AsFloat);
Break;
end;
end
else begin
StringGrid1.ColCount := StringGrid1.ColCount + 1;
StringGrid1.Cells[J,0] := KSYSXMQuery.FieldByName('FPMC').AsString;
StringGrid1.Cells[J,I-1] := FloatToMYStr(KSYSXMQuery.FieldByName('JE').AsFloat);
Break;
end;
J := J + 1;
end;
KSYSXMQuery.Next;
end;
StringGrid1.RowCount := StringGrid1.RowCount +1;
I := I + 1;
StringGrid1.Cells[1,I-1] := '小计';
StringGrid1.RowCount := StringGrid1.RowCount +1;
I := I + 1;
StringGrid1.Cells[0,I-1] := '合计';
StringGrid1.ColCount := StringGrid1.ColCount + 1;
StringGrid1.Cells[StringGrid1.ColCount-1,0] := '合计';
for J := 2 to StringGrid1.ColCount do begin
JEHJ := 0;
JEXJ := 0;
for I := 1 to StringGrid1.RowCount do begin
if not (StringGrid1.Cells[0,I] = '合计') then begin
if StringGrid1.Cells[1,I] = '小计' then begin
StringGrid1.Cells[J,I] := FloatToMYStr(JEXJ);
JEHJ := JEHJ + JEXJ;
JEXJ := 0;
end
else if StringGrid1.Cells[J,I] <> '' then
JEXJ := JEXJ + StrToFloat(StringGrid1.Cells[J,I]);
end
else
StringGrid1.Cells[J,I] := FloatToMYStr(JEHJ);
end;
end;

for I := 1 to StringGrid1.RowCount do begin
JEHJ := 0;
for J := 2 to StringGrid1.ColCount do begin
if (StringGrid1.Cells[J,0] = '合计') then begin
StringGrid1.Cells[J,I] := FloatToMYStr(JEHJ);
end
else if StringGrid1.Cells[J,I] <> '' then
JEHJ := JEHJ + StrToFloat(StringGrid1.Cells[J,I]);
end;
end;
StringGrid1.FixedRows := 1;
StringGrid1.FixedCols := 2;
end;

希望对你有帮助.
zoao 2000-03-17
  • 打赏
  • 举报
回复
再次提问:如何创建交叉统计报表。十万火急!!!!!!
zoao 2000-03-17
  • 打赏
  • 举报
回复
再次提问:如何创建交叉统计报表。十万火急!!!!!!
ghj1976可以具体点吗?
蝈蝈俊 2000-03-16
  • 打赏
  • 举报
回复
具体一点,一般用sql语句的order by ,group by就可以了.
bpc 2000-03-16
  • 打赏
  • 举报
回复
详细点!!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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