转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> SyBase >> 正文
关于在 sybase 下生成交叉报表的方法,希望能够抛砖引玉         ★★★★

关于在 sybase 下生成交叉报表的方法,希望能够抛砖引玉

作者:闵涛 文章来源:闵涛的学习笔记 点击数:793 更新时间:2009/4/22 23:09:45

有时候在开发产品时,要为用户提供输出比较多的报表,当用户处软件配置、初始化数据设置不一致时,报表的格式可能就不一样,这样,竖表变横表(既交叉报表)就能够发挥强大的作用


--假设有一个表 归类项目表,有20个项目科目, 
create table ITEMS 
(id int not null , 
name char(20) not null 


insert into ITEMS values (1,'项目1') 
insert into ITEMS values (2,'项目2') 
insert into ITEMS values (3,'项目3') 
insert into ITEMS values (4,'项目4') 
insert into ITEMS values (5,'项目5') 
insert into ITEMS values (6,'项目6') 
insert into ITEMS values (7,'项目7') 
insert into ITEMS values (8,'项目8') 
insert into ITEMS values (9,'项目9') 
insert into ITEMS values (10,'项目10') 


---还有一个表 明细项目 
drop table ITEMDETAIL 
create table ITEMDETAIL 
( id int identity not null , 
name char(10) not null , 
price numeric(10,2) not null default 0 , 
item_id int not null 


insert into ITEMDETAIL (name,price,item_id) values ('明细项目1',10,1) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目2',10,2) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目3',10,3) 
--insert into ITEMDETAIL (name,price,item_id) values ('明细项目4',10,4) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目5',10,5) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目6',10,6) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目7',10,7) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目8',10, 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目9',10,9) 
insert into ITEMDETAIL (name,price,item_id) values ('明细项目10',10,10) 



--第三个表:销售项目明细表 
drop table SALEDETAIL 
create table SALEDETAIL 
(orderno int identity not null ,--订单号 
orderdate char( not null,--日期 
invoiceno char(20) null,--发票号码 
itemdetail_id int not null, --明细项目编码 
item_id int not null, --归类大项目编码 
price numeric(10,2) not null , --价格 
num int not null, --数量 
dept_no char(6) not null, --部门 
amount numeric(10,2) not null 


--其他字段就不说了 



drop procedure usp_rpt_sale1 
go 
create procedure usp_rpt_sale1 
@date_b char(, --开始日期 
@date_e char( --截止日期 
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) 我就是这样做的 )

 zhangyh123 回复于:2003-06-28 20:10:44 怎么没有人回? 有人成功改造过吗? 

   我下周改造。到时候再贴

 jazy 回复于:2003-06-29 12:15:42 支持先!

 遥望 回复于:2003-09-01 17:49:24 在UNIX下怎么使用SYBASE 呀??

我安装好SYBASE后,不知道怎么用,请指教.
QQ:121824500

希望可以QQ交流,谢谢

全力支持你 

 zhangyh123 回复于:2003-09-01 18:35:51 如果你从来没有接触过建议你先啃一两本书再来详细交流,如果在看书时
有什么问题,可以在这里问。
搞清楚 sybase ase 软件的目录结构,每个目录的内容  有哪些工具 ,都是做什么的 
什么是设备、什么是段  sql 基本语句 函数 
系统表有哪些,主要的几个 : sysobjects \sysdevices \syssegments 
syscolumns 等 
很多基本概念必须先清楚,否则问什么别人也不知道

 stroustrup 回复于:2003-09-03 15:05:17 作过。不过没有这么灵活。

 


[办公软件]SYBASE数据库用户管理基本概念  [办公软件]关于SYBASE的自动启动
[办公软件]SYBASE事务  [办公软件]SYBASE dbcc
[C语言系列]SQL Server到SYBASE连接服务器的实现  [VB.NET程序]关于在VB中进行COM组件的开发(一、了解COM)
[Delphi程序]关于在COM中使用可选参数的研究  [其他]SQLServer到SYBASE连接服务器的实现
[SyBase]四川移动BOSS系统Sybase解决方案  [SyBase]中国联通CDMA计费系统工程的Sybase解决方案
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台