日期:2014-05-18 浏览次数:20902 次
declare @tb table (id int, 
    chargeamount money, chargedate datetime, 
    payment money, paydate datetime)
insert into @tb values (1, 2000.00, '2012-5-1', 1000.00,'2012-5-3')
insert into @tb values (2, 1000.00, '2012-6-1', 1000.00, '2012-6-1')
insert into @tb values (3, 3000.00, '2012-7-1', 3000.00, '2012-7-1')
/*
ID 应支付额 应支付时间 实际支付额 实际支付时间
*/
select a.mn, sum(chargeamount) as chargeamount, sum(payment) as payment, 
    isnull(sum(chargeamount),0) - isnull(sum(payment) ,0) as rest
from (
    select dateadd(month, datediff(month, 0, chargedate),0) as mn
    from @tb
    union
    select dateadd(month, datediff(month, 0, paydate),0) as mn
    from @tb
) as a
left join (
    select dateadd(month, datediff(month, 0, chargedate),0) as mn, sum(chargeamount) as chargeamount
    from @tb
    group by dateadd(month, datediff(month, 0, chargedate),0) 
) as b on b.mn = a.mn
left join (
    select dateadd(month, datediff(month, 0, paydate),0) as mn, sum(payment) as payment
    from @tb
    group by dateadd(month, datediff(month, 0, paydate),0) 
) as c on c.mn = a.mn
group by a.mn
with cube
-- mn,chargeamount,payment,rest
-- 2012-05-01 00:00:00.000,2000.0000,1000.0000,1000.0000
-- 2012-06-01 00:00:00.000,1000.0000,1000.0000,.0000
-- 2012-07-01 00:00:00.000,3000.0000,3000.0000,.0000
-- ,6000.0000,5000.0000,1000.0000
-- 
-- (所影响的行数为 4 行)
--