declare @t table(名称 varchar(10),时间 datetime,金额 int)
insert @t select '张三','2007-1-1',100
union all select '张三','2007-10-30',200
union all select '张三','2006-5-12',400
union all select '马六','2007-11-5',150
union all select '王五','2005-10-1',900
declare @t2 table(名称 varchar(10),描述 varchar(10))
insert @t2 select '张三','大学'
union all select '王五','中学'
union all select '马六','小学'
select a.名称,b.描述,a.[三个月以内],a.[三个月到一年],a.[一年以上],a.[合计]
from
(
select 名称,
[三个月以内]=sum(case when datediff(month,时间,getdate())<=3 then 金额 else 0 end),
[三个月到一年]=sum(case when datediff(month,时间,getdate())>3 and datediff(month,时间,getdate()) <=12 then 金额 else 0 end),
[一年以上]=sum(case when datediff(month,时间,getdate())>12 then 金额 else 0 end),
[合计]=sum(金额)
from @t
group by 名称
) a
left join @t2 b
on a.名称=b.名称
order by a.名称
/*
名称
描述
三个月以内
三个月到一年
一年以上
合计
---------- ---------- ----------- ----------- ----------- -----------
马六
小学
150
0
0
150
王五
中学
0
0
900
900
张三
大学
200
100
400
700
(所影响的行数为 3 行)
*/