先说一下,用户有二种使用方式和四种支付方式,对于这八种组合采取不同的费率(在费率表中),我如何算得上月所有用户的应交总额呢?
说明一下,比如用户使用方为租借,支付方式为每季支付,则费率160表示的是每季交160,即每月应为53.3 这样的SQL语句该如何写呢?
为了说的更明白一点,这两个SQL语句表的字段我用下面SQL来表示.
txtSQL = " SELECT a.监护用户ID,a.使用方式, a.开通日期,a.支付方式, b.费率, a.支付金额 , a.是否退还押金,  b.最大允许欠费额 FROM 财务表 a INNER JOIN 费率表 b ON a.使用方式 = b.使用方式 AND a.支付方式 = b.支付方式 where a.开通日期>'" & CDate(FirstDay) - 31 & "'and a.开通日期<'" & FirstDay & "'"
请大家帮帮忙!!
谢谢!!!!!!!

解决方案 »

  1.   

    如果SQL语句太复杂,为什么一定要用SQL语句呢?写出来也不一定会有效率呀。每个问题 写几句简单的代码处理完成就得了。
      

  2.   

    表设计不合理。非要一句SQL来解决表结构的缺陷似乎是钻牛角尖。
    建议在添加一个用户表,表中字段:
      监护用户ID
      使用方式
      开通日期
      支付方式
      费率, 
      支付金额
      是否退还押金
      最大允许欠费额
      月支付额——创建记录和更改记录时计算并写入此字段的值。
      

  3.   

    不一定非要写SQL语句的。
    提供两个方案:
    一、用VB算出来;
    二、用存储过程算出来。
      

  4.   

    TO:zhp80 and wnyNbfqrny(今无心)
    表的结构如下:
    财务表:(监护用户姓名,监护用户ID,使用方式,开通日期,停止日期,是否到期,支付方式,支付金额,续费日期,最新缴费,是否退还押金,维护维修费用,备注)
    费率表(使用方式,支付方式,费率,最大允许欠费额)
    TO:晴明:
    如果不用一个SQL语句写出来,则要八个查询语句算出每种费率本月所应交的费用.用的Recordset太多显然很麻烦,并且我这些是算出来的结果仍需要做进一步处理.
    TO:of123()
    第一,这个数据库并不是我一个人用,牵扯较大.
    第二,如果费率和最大允许欠费额也在一个表内的话.试想一下,刚开始没有任何用户的时候如何去设置费率呢?或者因为用户的余额(本来是按月交,现足以按季交),系统要自动调整它的支付方式,这时如果并没有此种费率,不就会出现更新错误吗??
    TO:周松
    我是个初学者,对存储过程一窍不通,你能告诉我这方面的知识吗?(我用的是SQLSERVER),还有如果用VB算出来,我也要通过SQL才能得到数据库的数据啊(难道真的要八次打开表?)谢谢大家的回答,请继续关注好吗??
      

  5.   

    你的 费率表 使用方式 与 支付方式 还有什么关系,SQL大致如下:SELECT a.监护用户ID,a.使用方式, a.监护用户姓名,
    CASE b.支付方式
    WHEN '每月支付' THEN b.费率
    WHEN '每季支付' THEN b.费率/3
    WHEN '半年支付' THEN b.费率/6
    WHEN '每年支付' THEN b.费率/12
    END AS 用户月应交额
    FROM 财务表 a INNER JOIN 费率表 b ON a.使用方式 = b.使用方式 AND a.支付方式 = b.支付方式 
    WHERE ...如不需名细,只要汇总,SUM下就可以了
      

  6.   

    谢谢zhp80:
    我还不知道select 语句里还可以放case语句:给我介绍一下好吗?
    就是求汇总
    公式如下使用方式和支付方式组和共有八种,把所算得的每月应交款和该组和方式下的人数分别求出来后为Monthpay(i)和Number(i),
    则求得总和
    MoneyCount=0
    for i=1 to 8 
      MoneyCount=MoneyCount+MonthPay(i)*Number(i)
    next i
    现在我的问题是如何求得这些值呢(monthpay(i)和number(i))
    难道每个值都要用一句SQL语句来求吗?(这样是做得到的,但显然不是个好方法)
    有什么别的方法吗?
    另如果让查询一个字段和统计人数是不是还要group by语句呢?(要不然会出错)