日期:2014-05-18  浏览次数:20580 次

如何计算利息,高手请进!
有两张表:
发货表:发货日,客户,日发货金额
收款表:收款日,客户,日收款金额
利息计算标准:
逾期3天收到货款,按8.5‰。
逾期30天-45收到货款,按10‰。
逾期45天-60,按12.5‰。
逾期61天以后,按15‰

要求得到利息表:
客户,发货总额,收款总额,应收欠款,利息

注意利息不计算在收款内,只计算出来.

------解决方案--------------------
SQL code
create table 发货表(发货日 datetime,客户 varchar(10),日发货金额 numeric(12,4))
go
insert 发货表 select '2007-07-01','何健铭',   77745.00 
insert 发货表 select '2007-08-05','金和兴',   74120.00 
insert 发货表 select '2007-08-06','李克秋',   33834.00 
insert 发货表 select '2007-09-01','伦祖坤',   24055.00 
go
create table 收款表(收款日 datetime,客户 varchar(10),日收款金额 numeric(12,4))
go
insert 收款表 select '2007-07-01','何健铭',77745.00 
insert 收款表 select '2007-08-15','金和兴',70000.00 
insert 收款表 select '2007-08-26','李克秋',33834.00 
insert 收款表 select '2007-11-05','伦祖坤',20000.00 
---1
select 客户,发货总额,收款总额,应收欠款,
利息=(case when datediff(d,发货日,收款日) between 3 and 30 then 应收欠款*0.0085

              when datediff(d,发货日,收款日) BETWEEN 30 and 44  then 应收欠款*0.001 
when datediff(d,发货日,收款日) BETWEEN 45 and 60  then 应收欠款*0.00125 
when datediff(d,发货日,收款日) >61 then 应收欠款*0.0015
           else 0
           end)
from (
select a.客户,max(a.发货日) as 发货日,max(b.收款日) as 收款日,发货总额 = sum(日发货金额),
              收款总额 = sum(日收款金额),
sum(日发货金额 - 日收款金额) as 应收欠款

from 发货表 a
left join 收款表 b
on a.客户 = b.客户

group by a.客户
) a

/*
客户         发货总额                                     收款总额                                     应收欠款                                     利息                                       
---------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- 
何健铭        77745.0000                               77745.0000                               .0000                                    .000000
金和兴        74120.0000                               70000.0000                               4120.0000                                35.020000
李克秋        33834.0000                               33834.0000                               .0000                                    .000000
伦祖坤        24055.0000                               20000.0000                               4055.0000                                6.082500

(所影响的行数为 4 行)
*/

----2


select a.客户,发货总额 = sum(日发货金额),
              收款总额 = sum(日收款金额),
              sum(日发货金额 - 日收款金额) as 应收欠款,
              利息=sum((case when datediff(d,发货日,收款日) between 3 and 30 then 日发货金额*0.0085
              when datediff(d,发货日,收款日) BETWEEN 30 and 44  then 日发货金额*0.001 
              when datediff(d,发货日,收款日) BETWEEN 45 and 60  then 日发货金额*0.00125 
              when datediff(d,发货日,收款日) >61 then 日发货金额*0.0015
           else 0
           end))

from 发货表 a
left join 收款表 b
on a.客户 = b.客户

group by a.客户
/*客户         发货总额                                     收款总额                                     应收欠款                                     利息                                       
---------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- 
何健铭        77745.0000                               77745.0000                               .0000                                    .000000000
金和兴        74120.0000                               70000.0000                               4120.0000                                630.020000000
李克秋        33834.0000                               33834.0000                               .0000                                    287.589000000
伦祖坤        24055.0000                               20000.0000                               4055.0000                                36.082500000

(所影响的行数为 4 行)

*/

drop table 发货表, 收款表

------解决方案--------------------
也不知道结果对不对,你试了再说吧.今天加班,随便写了一下.晚上再看.

SQL code

/*借老龟的数据*/
create