如何用使用临时表查询?(50分)

  • 主题发起人 主题发起人 thj
  • 开始时间 开始时间
T

thj

Unregistered / Unconfirmed
GUEST, unregistred user!
条件:已建好了一个数据库(户口表.db)并录入了数据
编号 姓名 收费 收费日期
1 张三 60.00 01-1-28
2 李四 200.00 01-2-30
1 张三 100.00 01-2-30
......
要求:希望建立临时表用dbgrid显示成如下格式
编号 姓名 一月收费 二月收费.....十二月收费 收费合计
1 张三 60.00 100.00 160.00
2 李四 200.00 200.00
望指点!(用的是Paradox本地数据库)
 
Rxlib里和DevExpress系列里均有个临时表控件,很好用的。先建好临时表,
再写一段程序就行了,很简单的。(www.inprises.com)
 
请具体一点,好吗!
 
to marknew:
后面的程序怎么写?谢谢指教!望给出原码。
 
先在窗体上放一MemData控件:dxMemData1
我想这段程序只考虑一年内的吧(看你的意思)
试下如下代码吧,你自己去调试。
在Fields Editor建好如下字段:
编号,姓名,1,2,3.....12 收费合计(设Caption为一月....十二月吧)
var lcNum,lcName:string;
lcMonth:string;
lnMoney:double;
begin
dxMemData1.close;
dxMemData1.open;
with query1 do
begin
first;
do while not eof do
begin
lcNum :=FieldByName('编号').asstring;
lcMonth:=''''+FormatDateTime('mm',FieldByName('收费日期').asDateTime)+'''';
lnMoney:=FieldByName('收费').asfloat;
if dxMemData1.locate('编号',lcNum,[]) then
begin
dxMemData1.FieldByName(lcMonth).value:=dxMemData1.FieldByName(lcMonth).value+lnMoney;
dxMemData1.FieldByName('收费合计').value:=dxMemData1.FieldByName('收费合计').value+lnMoney;
end
else
begin
dxMemData1.append;
dxMemData1.FieldByName('编号').value :=lcNum;
dxMemData1.FieldByName('姓名').value :=lcName;
dxMemData1.FieldByName(lcMonth).value :=lnMoney;
dxMemData1.FieldByName('收费合计').value:=lnMoney;
end;
next;
end;
end;
 
可以三步完成
1.create table #Result(编号 varcar(4),姓名 varchar(10), 一月收费 money, 二月收费.....十二月收费 money, 收费合计 money)
2.Insert into #Result(编号,姓名 , 一月收费 , 二月收费.....十二月收费, 收费合计 )
Select 编号,姓名 from 户口表 group by 编号,姓名
3.
update #Result Set 一月收费=isnull(户口表.收费,0) from #Result,户口表
where #Result.编号=户口.编号 and #Result.姓名=户口.姓名 and DatePart(MM,户口.收费日期)=1
update #Result Set 二月收费=isnull(户口表.收费,0) from #Result,户口表
where #Result.编号=户口.编号 and #Result.姓名=户口.姓名 and DatePart(MM,户口.收费日期)=2
update #Result Set 三月收费=isnull(户口表.收费,0) from #Result,户口表
where #Result.编号=户口.编号 and #Result.姓名=户口.姓名 and DatePart(MM,户口.收费日期)=3
.............
.............
............
update #Result Set 收费合计=一月收费+二月收费+.........+十二月收费

这样符合你得要求吗?
 
接受答案了.
 
后退
顶部