交叉表
CREATE PROCEDURE prCrosstab
@chrRowHead char(30),/*表示列,在交叉表的结果中作为第一列出现*/
@chrColHead char(30),/*表示列,在交叉表的结果中该列中的数据被变换为新列名称*/
@chrvalue char(30),/*表示列,在该列中执行聚合函数*/
@chrSource char(30),/*源表或视图*/
@inyType tinyint=1,/*1-求和,2-平均值,3-最小值,4-最大值,5-计数*/
@inyGrouping tinyint=0/*1-工作日,2-年内的周数,3-月份,4-季度,5-年份*/
AS
/*过程变量*/
Declare
@chvRow varchar(255),
@chvCol varchar(255),
@chvVal varchar(255),
@chvType varchar(10),
@chvRowType varchar(10),
@chvColType varchar(255),
@chvTemp varchar(255),
@chvColTemp varchar(255),
@chvRowTemp varchar(255),
@intType int,
@intRowType int,
@intColType int,
@chvExec varchar(255),
@chvGroup varchar(255),
@fltTemp float,
@dtmTemp Datetime,
@insR smallint,
@intColumn int,
@intReturn int,
@intTemp int,
@intColNameLen int,
@intMaxRowHead int
Set NoCount On
CREATE PROCEDURE prCrosstab
@chrRowHead char(30),/*表示列,在交叉表的结果中作为第一列出现*/
@chrColHead char(30),/*表示列,在交叉表的结果中该列中的数据被变换为新列名称*/
@chrvalue char(30),/*表示列,在该列中执行聚合函数*/
@chrSource char(30),/*源表或视图*/
@inyType tinyint=1,/*1-求和,2-平均值,3-最小值,4-最大值,5-计数*/
@inyGrouping tinyint=0/*1-工作日,2-年内的周数,3-月份,4-季度,5-年份*/
AS
/*过程变量*/
Declare
@chvRow varchar(255),
@chvCol varchar(255),
@chvVal varchar(255),
@chvType varchar(10),
@chvRowType varchar(10),
@chvColType varchar(255),
@chvTemp varchar(255),
@chvColTemp varchar(255),
@chvRowTemp varchar(255),
@intType int,
@intRowType int,
@intColType int,
@chvExec varchar(255),
@chvGroup varchar(255),
@fltTemp float,
@dtmTemp Datetime,
@insR smallint,
@intColumn int,
@intReturn int,
@intTemp int,
@intColNameLen int,
@intMaxRowHead int
Set NoCount On
/*检查数据源是否存在*/
if not Exists
(select * From sysobjects
where name=@chrSource and type in('v','u'))
Begin
Raiserror 51001 '数据源不存在'
Return -1
End
/*检查列是否存在*/
if not Exists
(select sc.name from syscolumns sc
join sysobjects so on sc.id=so.id
where so.name=@chrSource
and sc.name=@chrColHead)
Begin
Raiserror 51002 '无效 @chrC

