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 #你的表

解决方案 »

  1.   

    declare @欠款日期 datetime
    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,发货日期
      

  2.   

    --写为存储过程就是:
    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'
      

  3.   

    create procedure p_a(@a smalldatetime)
    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,发货日期
      

  4.   

    可以改成sp_executesql的形式吗?因为用的时候还有参数从前台传过来.我改了不行
      

  5.   

    create proc 过程名
    @时间参数 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
      

  6.   

    调用:exec 过程名 getdate(),30
      

  7.   

    我的意思没有表达清楚,我想说的是:
    如果有从前台传过来的条件,则要添加在@sql中(既是在@sql中加入where条件)
    这样用sp_executesql是否好些?
      

  8.   

    to:zjcxc(邹建)
    如客户名称,业务员等,
    以上条件在另一表b中,上述条件可能有,也可能无。由用户选择。