ACCESS表1,有 姓名、账号、开户日期、开户金额、清户日期5个字段:
要求,1、按照规定日期范围查询,即起始日期——截至日期2、查询结果分别按起始日期、截至日期与开户日期、清户日期相比较后得到的天数乘以开户金额,得到基数。
又分多种情况:当一条记录的开户日期在起始日期之后,清户日期为空时(还没有清户)就要用开户日期和截至日期之间的天数;当记录的开户日期在起始日期之前,而清户日期在截至日期之前,就要用起始日期和清户日期之间的天数……3、按姓名分类汇总,得到相应姓名的基数1、实现以上功能该怎样做啊?
2、我现在想是不是再建一个表2和表1相同,把第一步查询结果输出到表2,然后再在表2中计算,结果写到表2的基数字段,然后再对表2进行分类汇总啊?
3、我的这种方法是不是很慢?
4、该用什么方法实现最好呢?
5、可不可以用事务处理?
6、用事务处理大概怎样做?
要求,1、按照规定日期范围查询,即起始日期——截至日期2、查询结果分别按起始日期、截至日期与开户日期、清户日期相比较后得到的天数乘以开户金额,得到基数。
又分多种情况:当一条记录的开户日期在起始日期之后,清户日期为空时(还没有清户)就要用开户日期和截至日期之间的天数;当记录的开户日期在起始日期之前,而清户日期在截至日期之前,就要用起始日期和清户日期之间的天数……3、按姓名分类汇总,得到相应姓名的基数1、实现以上功能该怎样做啊?
2、我现在想是不是再建一个表2和表1相同,把第一步查询结果输出到表2,然后再在表2中计算,结果写到表2的基数字段,然后再对表2进行分类汇总啊?
3、我的这种方法是不是很慢?
4、该用什么方法实现最好呢?
5、可不可以用事务处理?
6、用事务处理大概怎样做?
with query do
begin
sql.close;
sql.clear;
sql.text:='
select 姓名,账号,
基数=sum(开户金额)* :A
from 表
where (你的条件)//不太明白你截止日期和起始日期是怎么规定的?
group by 姓名,账号
union select 姓名,'',
基数=sum(开户金额)* :A from 表 where (你的条件)
group by 姓名';
parameters.parambyname('A').value:=根据计算得出的那个天数
open;
end;
我就是简单的说了一下,其实你仔细想想这个也没那么复杂
可能条件判断那比较麻烦,你用你的那两个条件生成一下临时表,然后更新数据也可以
如sqlserver:
select 姓名,开户金额 * ( (case when 开户日期 >起始日期 then 开户日期 else 起始日期 end) -
(case when isnull(清户日期,'210-01-01') >截至日期 then 截至日期 else 清户日期 end) )
from tablename说明:access 中不支持 case语句和.; isnull使用不同
http://www.cnkernel.com/wncx.rar