热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

sybase 下生成交叉报表的方法

来源: 作者: 时间:2007-09-13 Tag: 点击:




drop procedure usp_rpt_sale1 
go 
create procedure usp_rpt_sale1 
@date_b char(8), --开始日期 
@date_e char(8) --截止日期 
as 
begin 
declare @sqlstr1 varchar(8000), @sqlstr2 varchar(8000) 
declare @id int , @name char(20) 
select @sqlstr1 = 'select dept_no, ' 
--声明一个游标,以该游标控制动态语句的生成
declare cursor1 cursor for 
select id ,name from ITEMS for read only 
open cursor1 
fetch cursor1 into @id, @name 
select @sqlstr1 = @sqlstr1 + 'sum(case when itemdetail_id = ' + convert(varchar,@id)+ ' then amount else 0 ) as '+ @name + char(13) 

fetch cursor1 into @id, @name 
while @@fetch_status = 0 
begin 
select @sqlstr1 = @sqlstr1 + ' , sum(case when itemdetail_id =' + convert(varchar,@id)+ ' then amount else 0 ) as '+ @name + char(13) 
fetch cursor1 into @id, @name 
end 
close cursor1 
deallocate cursor1 
--print @sqlstr1 
select @sqlstr1 = @sqlstr1+ ', sum(amount) as "小计" ' + ' from SALEDETAIL where orderdate between "'+ @date_b + '" and "'+ @date_e + '" group by dept_no ' 
print @sqlstr1 
--exec (@sqlstr1) 
end 

go 
exec usp_rpt_sale1 '20030101','20030101' 


--------------------------------------------------------------

在 sybase 12.0 支持动态 sql 的版本上才能运行!
以上是 mssql 2000 版本 ,
如果需要使用,可以改造为 sybase 版本 有几个地方需要注意:
 varchar(8000)  可以多声明几个 varchar(255) ,在游标中再加控制,每5个记录 生成一个 sql 语句  
运行时 改变为 exec (@sqlstr1+@sqlstr2+@sqlstr3+@sqlstr4)的形式 

(原来 mssql 7.0 没有varchar(8000) 我就是这样做的 )

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册