[本文主要是自己做的备忘]
需求与难点:
1.要在自定义报表中实现;
2.要有现价、近价、前3年各年均价、核价、去年同期、前十二月平均单价、去年最后一次进价放在一张表进行对比分析,并做出简单的分析判断;
3.因为第二点,要用到动态SQL和存储过程,而易飞自定义报表不支持动态SQL,所以间接采用了用 视图作为中转。
做过的东西老是忘记,所以记录了下面是步骤备记:
一.create proc,目的是用动态SQL生成以上数据(这里抓取了全部的数据,如果数据量太大,只需抓取几年的数据,则启用@num参数即可,在下面的存储过程中我有备注了@num,启用时,只要去掉前面的'--'即可,同时的后面的where条件也要去掉'--'):
if exists(select *from sysobjects where name='jfpurprice')
drop proc jfpurprice
go
create proc jfpurprice --@num numeric
as begin
---采购各类价格汇总表
declare @tab table(wid varchar(100),今年价 varchar(100),今年量 varchar(100),去年价 varchar(100),去年量 varchar(100)
,前年价 varchar(100),前年量 varchar(100),前年价L varchar(100),前年量L varchar(100),前年价LL varchar(100),前年量LL varchar(100))
declare @sql as Nvarchar(4000)
set @sql='select TD004'
select @sql=@sql + ',avg(case substring(TC003,1,4) when '''+item+'''then TD010 end) As ['+item+'],'
+ ' isnull(cast(cast(sum(case substring(TC003,1,4) when '''+item+'''then TD008 end) as numeric(16,2))
as varchar(17)),'+'''--'''+') as ['+item+'采购量'+']'
from (select distinct top 10 substring(TC003,1,4)as item from PURTD left join PURTC on TD001=TC001 and TD002=TC002
where substring(TC003,1,6)>=substring(convert(varchar(20),dateadd(year,-4,getdate()),112),1,6)
and substring(TC003,1,6)<=substring(convert(varchar(20),dateadd(year,-0,getdate()),112),1,6)
order by substring(TC003,1,4) desc ) as A
select @sql=@sql+'from PURTD left join PURTC on TD001=TC001 and TD002=TC002 where TC014='+'''Y'''+'
group by TD004'
--