下面的功能如何用存储过程实现?谢谢

chenhaijiang 2003-11-06 03:40:45
表a
fhid 发货日期 欠款
01 2003-01-04 1000
01 2003-01-04 800
02 2003-06-05 2000
我想用以下数据存入临时表:
fhid 发货日期 欠款日期<=30天 欠款日期>31 天
01 2003-01-04 0 1800
02 2003-06-05 0 2000
其中欠款日期为指定日期(由参数传入)-发货日期,天数也由参数传入.
...全文
116 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhaijiang 2003-11-07
  • 打赏
  • 举报
回复
我的意思没有表达清楚,我想说的是:
如果有从前台传过来的条件,则要添加在@sql中(既是在@sql中加入where条件)
这样用sp_executesql是否好些?
chenhaijiang 2003-11-07
  • 打赏
  • 举报
回复
to:zjcxc(邹建)
如客户名称,业务员等,
以上条件在另一表b中,上述条件可能有,也可能无。由用户选择。
Angelnet 2003-11-07
  • 打赏
  • 举报
回复
UP
zjcxc 元老 2003-11-07
  • 打赏
  • 举报
回复
仅需要统计的日期参数就没必要了.

最好举例说明.
zjcxc 元老 2003-11-07
  • 打赏
  • 举报
回复
你前台传的是些什么条件?
pengdali 2003-11-06
  • 打赏
  • 举报
回复
调用:

exec 过程名 getdate(),30
pengdali 2003-11-06
  • 打赏
  • 举报
回复
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
chenhaijiang 2003-11-06
  • 打赏
  • 举报
回复
可以改成sp_executesql的形式吗?因为用的时候还有参数从前台传过来.我改了不行
hdslah 2003-11-06
  • 打赏
  • 举报
回复
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,发货日期
zjcxc 元老 2003-11-06
  • 打赏
  • 举报
回复
--写为存储过程就是:
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'
zjcxc 元老 2003-11-06
  • 打赏
  • 举报
回复
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,发货日期

pengdali 2003-11-06
  • 打赏
  • 举报
回复
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 #你的表

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧