ACCESS表1,有 姓名、账号、开户日期、开户金额、清户日期5个字段:
要求,1、按照规定日期范围查询,即起始日期——截至日期2、查询结果分别按起始日期、截至日期与开户日期、清户日期相比较后得到的天数乘以开户金额,得到基数。
又分多种情况:当一条记录的开户日期在起始日期之后,清户日期为空时(还没有清户)就要用开户日期和截至日期之间的天数;当记录的开户日期在起始日期之前,而清户日期在截至日期之前,就要用起始日期和清户日期之间的天数……3、按姓名分类汇总,得到相应姓名的基数1、实现以上功能该怎样做啊?
2、我现在想是不是再建一个表2和表1相同,把第一步查询结果输出到表2,然后再在表2中计算,结果写到表2的基数字段,然后再对表2进行分类汇总啊?
3、我的这种方法是不是很慢?
4、该用什么方法实现最好呢?
5、可不可以用事务处理?
6、用事务处理大概怎样做?

解决方案 »

  1.   

    如果是MS SQL的话一个比较简单的SQL语句就可以实现了
    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;
    我就是简单的说了一下,其实你仔细想想这个也没那么复杂
    可能条件判断那比较麻烦,你用你的那两个条件生成一下临时表,然后更新数据也可以
      

  2.   

    access中很难 实现
    如sqlserver:
    select 姓名,开户金额 * ( (case when 开户日期 >起始日期 then 开户日期 else 起始日期 end) -
    (case when isnull(清户日期,'210-01-01') >截至日期 then 截至日期 else 清户日期 end) )
    from tablename说明:access 中不支持 case语句和.; isnull使用不同
      

  3.   

    我做了个万能查询程序,你可以参看:
       http://www.cnkernel.com/wncx.rar