客户费用表:年月,客户号,费用。假设字段“年月”是字符串,形式为“YYYYMM” 客户预付款表:客户号,金额 那么可以这样: select f.客户号, (case when f.往年费用>p.金额 then f.往年费用-p.金额 else 0) as 往年欠费, (case when f.今年费用>p.金额 then f.今年费用-p.金额-(f.往年费用-p.金额) else 0) as 本年欠费 from (select 客户号, sum(case when 年月<left(convert(varchar(10),getdate(),112),4) then 金额 else 0 end) as 往年费用, sum(金额) as 今年费用 from 客户费用表 group by 客户号) as f inner join 客户预付款表 p on f.客户号=p.客户号
比如说,某个用户在2003.10月交费后,结余了一笔(多交了).一直到2004.05没来,但是这几个月都有费用发生.他的预付款可能比这几个月的总数多,也可能只够其中几个月的.现在想统计所有用户的欠费情况.要把往年欠费和本年欠费分开统计.
我只会用游标来解决,几个循环吧.但是用户很多,估计效率低.
请帮忙看看,有没有什么好的方法.
手工下帐的方式,某个用户年初预付了一笔款,以后每个月减.
这是一个收费的系统.用户来交费,打票
就是想统计用户每个月的实际欠费.
客户预付款表:客户号,金额
那么可以这样:
select f.客户号,
(case when f.往年费用>p.金额 then f.往年费用-p.金额 else 0) as 往年欠费,
(case when f.今年费用>p.金额 then f.今年费用-p.金额-(f.往年费用-p.金额) else 0) as 本年欠费
from (select 客户号,
sum(case when 年月<left(convert(varchar(10),getdate(),112),4) then 金额 else 0 end) as 往年费用,
sum(金额) as 今年费用
from 客户费用表
group by 客户号) as f inner join 客户预付款表 p on f.客户号=p.客户号
这里,本年费用不含往年费用.各个各的.
如何统计本年度欠费