create table #你的表(fhid varchar(10),发货日期 datetime,欠款 int)
insert #你的表 values('01','2003-01-04', 1000)
insert #你的表 values('01','2003-01-04', 800)
insert #你的表 values('02','2003-06-05', 2000)
declare @时间参数 datetime,@天数参数 int
select @时间参数=getdate(),@天数参数=30
declare @sql varchar(8000)
set @sql='select fhid,CONVERT(varchar(10),发货日期,120) 发货日期,
sum(case when datediff(day,发货日期,'''+CONVERT(varchar(10),@时间参数,120)+''')<='+cast(@天数参数 as varchar(10))+' then 欠款 else 0 end) [欠款日期<='+cast(@天数参数 as varchar(10))+'天],
sum(case when datediff(day,发货日期,'''+CONVERT(varchar(10),@时间参数,120)+''')>'+cast(@天数参数 as varchar(10))+' then 欠款 else 0 end) [欠款日期>'+cast(@天数参数 as varchar(10))+'天]
from #你的表 group by fhid,CONVERT(varchar(10),发货日期,120)'exec(@sql)go
drop table #你的表
insert #你的表 values('01','2003-01-04', 1000)
insert #你的表 values('01','2003-01-04', 800)
insert #你的表 values('02','2003-06-05', 2000)
declare @时间参数 datetime,@天数参数 int
select @时间参数=getdate(),@天数参数=30
declare @sql varchar(8000)
set @sql='select fhid,CONVERT(varchar(10),发货日期,120) 发货日期,
sum(case when datediff(day,发货日期,'''+CONVERT(varchar(10),@时间参数,120)+''')<='+cast(@天数参数 as varchar(10))+' then 欠款 else 0 end) [欠款日期<='+cast(@天数参数 as varchar(10))+'天],
sum(case when datediff(day,发货日期,'''+CONVERT(varchar(10),@时间参数,120)+''')>'+cast(@天数参数 as varchar(10))+' then 欠款 else 0 end) [欠款日期>'+cast(@天数参数 as varchar(10))+'天]
from #你的表 group by fhid,CONVERT(varchar(10),发货日期,120)'exec(@sql)go
drop table #你的表
set @欠款日期=getdate()select fhid,发货日期
,[欠款日期<=30表]=sum(case when datediff(day,发货日期,@欠款日期)<=30 then 欠款 else 0 end)
,[欠款日期>31表]=sum(case when datediff(day,发货日期,@欠款日期)>31 then 欠款 else 0 end)
from 表a group by fhid,发货日期
create proc p_qry
@欠款日期 datetime
as
select fhid,发货日期
,[欠款日期<=30表]=sum(case when datediff(day,发货日期,@欠款日期)<=30 then 欠款 else 0 end)
,[欠款日期>31表]=sum(case when datediff(day,发货日期,@欠款日期)>31 then 欠款 else 0 end)
from 表a group by fhid,发货日期
go--调用:
exec p_qry '2003-01-01'
as
select fhid,发货日期,0 [欠款日期<=30天],sum(欠款) [欠款日期>31天] from table
where datediff(d,发货日期,@a)>31 group by fhid,发货日期
union all
select fhid,发货日期,sum(欠款) [欠款日期<=30天],0 [欠款日期>31天] from table
where datediff(d,发货日期,@a)<31 group by fhid,发货日期
@时间参数 datetime,@天数参数 int
as
beign
declare @sql varchar(8000)
set @sql='select fhid,CONVERT(varchar(10),发货日期,120) 发货日期,
sum(case when datediff(day,发货日期,'''+CONVERT(varchar(10),@时间参数,120)+''')<='+cast(@天数参数 as varchar(10))+' then 欠款 else 0 end) [欠款日期<='+cast(@天数参数 as varchar(10))+'天],
sum(case when datediff(day,发货日期,'''+CONVERT(varchar(10),@时间参数,120)+''')>'+cast(@天数参数 as varchar(10))+' then 欠款 else 0 end) [欠款日期>'+cast(@天数参数 as varchar(10))+'天]
from 你的表 group by fhid,CONVERT(varchar(10),发货日期,120)'exec(@sql)
end
如果有从前台传过来的条件,则要添加在@sql中(既是在@sql中加入where条件)
这样用sp_executesql是否好些?
如客户名称,业务员等,
以上条件在另一表b中,上述条件可能有,也可能无。由用户选择。