以前总是在网上搜一些交叉表生成的相关代码 但是使用起来总是很复杂 看看 刚出炉的东西对你来说是不是有所帮助 :_)

先看看下一个生成的存储过程 :SQLServer2000

Create Procedure [dbo].[pGet_Cross_Simple_Report_For_统计生成表_By_工龄编码_职称编号]

As

--pGet_Cross_By_统计生成表

Begin

--CREATE TABLE [统计生成表](

-- [工龄编码] int NOT NULL,

-- [职称编号] [int] NOT NULL,

-- [统计值] [int] NULL,

-- CONSTRAINT [PK_统计生成表] PRIMARY KEY CLUSTERED

--(

-- [工龄编码] ASC,

-- [职称编号] ASC

--) ON [PRIMARY]

--) ON [PRIMARY]

Declare @SQL        nvarchar(4000)

Declare @SQL_Create nvarchar(2000)

Declare @SQL_Insert nvarchar(2000)

Declare @SQL_InsertValues nvarchar(2000)

Declare @SQL_InsertValuesDeclare nvarchar(2000)

Declare @SQL_Select nvarchar(2000)

Declare @SQL_SetDefaultValues nvarchar(2000)

Select @SQL_Create = 'Declare @AcrossTable Table(a nvarchar(100)'

Select @SQL_Insert = '

Insert into @AcrossTable (a'

Select @SQL_InsertValues  = 'Values ( @a'

Select @SQL_InsertValuesDeclare = 'Declare @a nvarchar(100)

'

Select @SQL_Select = 'Select a'

Select @SQL_SetDefaultValues = 'Select @a = ''''

'

Declare @ColCode int

DECLARE The_I CURSOR FOR Select Distinct 职称编号 From  统计生成表  Order By 职称编号 ASC

OPEN The_I

FETCH NEXT FROM The_I  INTO @ColCode

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_Create = @SQL_Create + ',b' + Convert(varchar(10),@ColCode)+ ' nvarchar(100)'

Select @SQL_Insert = @SQL_Insert + ',b' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValues = @SQL_InsertValues + ',@b' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValuesDeclare = @SQL_InsertValuesDeclare + 'Declare @b' + Convert(varchar(10),@ColCode) + ' nvarchar(100)

'

Select @SQL_Select = @SQL_Select + ',b' + Convert(varchar(10),@ColCode)

Select @SQL_SetDefaultValues = @SQL_SetDefaultValues + 'Select @b' + Convert(varchar(10),@ColCode) + ' = ''''

'

FETCH NEXT FROM The_I  INTO @ColCode

End

CLOSE The_I

DEALLOCATE The_I

--得到动态交叉表的创建语句

--例如:Declare @AcrossTable Table(a nvarchar(100),b1 nvarchar(100),b2 nvarchar(100),b3 nvarchar(100),b4 nvarchar(100),b5 nvarchar(100) )

Select @SQL_Create = @SQL_Create + ' )'

--得到动态交叉表的Insert语句前半部分

--例如: Insert into @AcrossTable (a,b1,b2,b3,b4,b5 )

Select @SQL_Insert = @SQL_Insert + ' )'

--得到动态交叉表的Insert语句后半部分

--例如: Values ( @a,@b1,@b2,@b3,@b4,@b5 )

Select @SQL_InsertValues = @SQL_InsertValues + ' )'

--得到动态交叉表的Select语句

--例如:Select a,b1,b2,b3,b4,b5,b6 From @AcrossTable

Select @SQL_Select = @SQL_Select + ' From @AcrossTable'

Declare @SQL_InsertX nvarchar(2000)

Select  @SQL_InsertX = ''

Declare @SQL_SelectX nvarchar(2000)

Declare @RowCode int

Declare @Value   int

Declare @RowCode_Count int

Declare @Count int

Select  @Count = (Select count(*)  From (Select Distinct 工龄编码 From 统计生成表) a)

Declare The_X Cursor For Select  工龄编码,Count(*) From    统计生成表 Group By 工龄编码 Order By 工龄编码 Asc

OPEN The_X

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

WHILE  @Count > 0

BEGIN

Select @SQL_SelectX = 'Select @a =  ' + Convert(varchar(10),@RowCode) + '

'

DECLARE The_Y CURSOR FOR

Select 职称编号,统计值  From  统计生成表 Where 工龄编码 = @RowCode  Order By 职称编号 ASC

OPEN The_Y

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_SelectX = @SQL_SelectX + 'Select @b' + Convert(varchar(10),@ColCode) + ' = ' + Convert(varchar(10),@Value) + '

'

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

End

CLOSE The_Y

DEALLOCATE The_Y

Select @Count = @Count - 1

Select @SQL_InsertX = @SQL_InsertX  + '

'+ @SQL_SelectX + '

'+ @SQL_Insert + '

'+ @SQL_InsertValues + '

'+ @SQL_SetDefaultValues + '

'

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

End

CLOSE The_X

DEALLOCATE The_X

Select @SQL = @SQL_InsertValuesDeclare + '

' + @SQL_Create + '

' + @SQL_InsertX + '

' + @SQL_Select

Print @SQL

Execute (@SQL )

end

结果 :

1   1   2  3   4   5

2   6   7  8   9  10

3 11 12 13 14 15

4 16 17 18 19 20

再给出一个复杂的生成后的存储过程

Create Procedure [dbo].[pGet_Cross_Report_For_统计生成表_By_工龄编码_职称编号]

As

Begin

--CREATE TABLE [工龄工资标准表](

-- [工龄编码] [int] IDENTITY(1,1) NOT NULL,

-- [工龄名称] [nvarchar](40)  NULL

--CREATE TABLE [职称信息表](

-- [职称编号] [int] IDENTITY(1,1) NOT NULL,

-- [职称名称] [nvarchar](40)  NULL

--CREATE TABLE [TableName_By_Stat%>](

-- [工龄编码] [int] NOT NULL,

-- [职称编号] [int] NOT NULL,

-- [统计值] [int] NULL,

Declare @SQL        nvarchar(4000)

Declare @SQL_Create nvarchar(2000)

Declare @SQL_Insert nvarchar(2000)

Declare @SQL_InsertValues nvarchar(2000)

Declare @SQL_InsertValuesDeclare nvarchar(2000)

Declare @SQL_Select nvarchar(2000)

Declare @SQL_Title nvarchar(2000)

Declare @SQL_TitleValues nvarchar(2000)

Declare @SQL_SetDefaultValues nvarchar(2000)

Select @SQL_Create = 'Declare @AcrossTable Table(a nvarchar(100)'

Select @SQL_Insert = '

Insert into @AcrossTable (a'

Select @SQL_InsertValues  = 'Values ( @a'

Select @SQL_InsertValuesDeclare = 'Declare @a nvarchar(100)

'

Select @SQL_Select = 'Select a'

Select @SQL_TitleValues = '

Select @a = '''''

Select @SQL_SetDefaultValues = 'Select @a = ''''

'

Declare @ColCode int

Declare @ColName nvarchar(100)

DECLARE The_I CURSOR FOR Select 职称编号,职称名称 From  职称信息表  Order By 职称编号 ASC

OPEN The_I

FETCH NEXT FROM The_I  INTO @ColCode,@ColName

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_TitleValues = @SQL_TitleValues + '

Select @b' + Convert(varchar(10),@ColCode) + ' = ''' + @ColName +''''

Select @SQL_Create = @SQL_Create + ',b' + Convert(varchar(10),@ColCode)+ ' nvarchar(100)'

Select @SQL_Insert = @SQL_Insert + ',b' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValues = @SQL_InsertValues + ',@b' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValuesDeclare = @SQL_InsertValuesDeclare + 'Declare @b' + Convert(varchar(10),@ColCode) + ' nvarchar(100)

'

Select @SQL_Select = @SQL_Select + ',b' + Convert(varchar(10),@ColCode)

Select @SQL_SetDefaultValues = @SQL_SetDefaultValues + 'Select @b' + Convert(varchar(10),@ColCode) + ' = ''''

'

FETCH NEXT FROM The_I  INTO @ColCode,@ColName

End

CLOSE The_I

DEALLOCATE The_I

--得到动态交叉表的创建语句

--例如:Declare @AcrossTable Table(a nvarchar(100),b1 nvarchar(100),b2 nvarchar(100),b3 nvarchar(100),b4 nvarchar(100),b5 nvarchar(100) )

Select @SQL_Create = @SQL_Create + ' )'

--得到动态交叉表的Insert语句前半部分

--例如: Insert into @AcrossTable (a,b1,b2,b3,b4,b5 )

Select @SQL_Insert = @SQL_Insert + ' )'

--得到动态交叉表的Insert语句后半部分

--例如: Values ( @a,@b1,@b2,@b3,@b4,@b5 )

Select @SQL_InsertValues = @SQL_InsertValues + ' )'

--得到动态交叉表的Select语句

--例如:Select a,b1,b2,b3,b4,b5,b6 From @AcrossTable

Select @SQL_Select = @SQL_Select + ' From @AcrossTable'

--得到动态交叉表的Title语句

--例如:Select @a = ''

--  Select @b1 = '员级及以下'

--  Select @b2 = '初级职称'

--  Select @b3 = '中级职称'

--  Select @b4 = '高级职称'

--  Select @b5 = '正高级(相当于正高级)职称'

--  Insert into @AcrossTable (a,b1,b2,b3,b4,b5 )

--  Values ( @a,@b1,@b2,@b3,@b4,@b5 )

Select @SQL_Title = @SQL_TitleValues + '

' + @SQL_Insert + '

' + @SQL_InsertValues

Declare @SQL_InsertX nvarchar(2000)

Select  @SQL_InsertX = ''

Declare @SQL_SelectX nvarchar(2000)

Declare @RowCode int

Declare @Value   int

Declare @RowCode_Count int

Declare @Count int

Select  @Count = Count(*) From 工龄工资标准表

Declare The_X Cursor For Select  工龄编码,Count(*) From    统计生成表 Group By 工龄编码 Order By 工龄编码 Asc

OPEN The_X

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

WHILE  @Count > 0

BEGIN

Select @SQL_SelectX = 'Select @a = 工龄名称 From 工龄工资标准表 Where 工龄编码 = ' + Convert(varchar(10),@RowCode) + '

'

DECLARE The_Y CURSOR FOR

Select 职称编号,统计值  From  统计生成表 Where 工龄编码 = @RowCode  Order By 职称编号 ASC

OPEN The_Y

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_SelectX = @SQL_SelectX + 'Select @b' + Convert(varchar(10),@ColCode) + ' = ' + Convert(varchar(10),@Value) + '

'

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

End

CLOSE The_Y

DEALLOCATE The_Y

Select @Count = @Count - 1

Select @SQL_InsertX = @SQL_InsertX  + '

'+ @SQL_SelectX + '

'+ @SQL_Insert + '

'+ @SQL_InsertValues + '

'+ @SQL_SetDefaultValues + '

'

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

End

CLOSE The_X

DEALLOCATE The_X

Select @SQL = @SQL_InsertValuesDeclare + '

' + @SQL_Create + '

' + @SQL_Title + '

' + @SQL_SetDefaultValues + '

' + @SQL_InsertX + '

' + @SQL_Select

Print @SQL

Execute (@SQL )

end

结果:

员级及以下 初级职称 中级职称 高级职称 正高级(相当于正高级)职称 XX

1-10年工龄                 1              2               3                                             4     5

11-20年工龄               6              7               8                                             9    10

21-30年工龄             11            12             13                                           14    15

大于30年工龄          16            17             18                                            19    20

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

:_)

现在给出生成这两个存储过程的存储过程

Create Procedure [dbo].[pCreateProcedure_CrossSimpleReport]

@TableName varchar(100) ,

@RowName varchar(500) ,

@ColumnName varchar(500) ,

@Value  varchar(500)

AS

Begin

--Declare @TableName varchar(100)

--Declare @RowName varchar(500)

--Declare @ColumnName varchar(500)

--Declare @Value  varchar(500)

--

--Select @TableName = '统计生成表'

--Select @RowName = '工龄编码'

--Select @ColumnName = '职称编号'

--Select @Value   = '统计值'

--

--Execute pCreateProcedure_CrossSimpleReport @TableName,@RowName,@ColumnName,@Value

--execute pGet_Cross_Simple_Report_For_统计生成表_By_工龄编码_职称编号

Declare @CreateSQL varchar(8000)

Select @CreateSQL = '

Create Procedure pGet_Cross_Simple_Report_For__By__

As

--pGet_Cross_By_

Begin

--CREATE TABLE [](

-- [] [int] NOT NULL,

-- [] [int] NOT NULL,

-- [] [int] NULL,

-- CONSTRAINT [PK_] PRIMARY KEY CLUSTERED

--(

-- [] ASC,

-- [] ASC

--) ON [PRIMARY]

--) ON [PRIMARY]

Declare @SQL        nvarchar(4000)

Declare @SQL_Create nvarchar(2000)

Declare @SQL_Insert nvarchar(2000)

Declare @SQL_InsertValues nvarchar(2000)

Declare @SQL_InsertValuesDeclare nvarchar(2000)

Declare @SQL_Select nvarchar(2000)

Declare @SQL_SetDefaultValues nvarchar(2000)

Select @SQL_Create = ''Declare @AcrossTable Table(a nvarchar(100)''

Select @SQL_Insert = ''

Insert into @AcrossTable (a''

Select @SQL_InsertValues  = ''Values ( @a''

Select @SQL_InsertValuesDeclare = ''Declare @a nvarchar(100)

''

Select @SQL_Select = ''Select a''

Select @SQL_SetDefaultValues = ''Select @a = ''''''''

''

Declare @ColCode int

DECLARE The_I CURSOR FOR Select Distinct From    Order By ASC

OPEN The_I

FETCH NEXT FROM The_I  INTO @ColCode

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_Create = @SQL_Create + '',b'' + Convert(varchar(10),@ColCode)+ '' nvarchar(100)''

Select @SQL_Insert = @SQL_Insert + '',b'' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValues = @SQL_InsertValues + '',@b'' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValuesDeclare = @SQL_InsertValuesDeclare + ''Declare @b'' + Convert(varchar(10),@ColCode) + '' nvarchar(100)

''

Select @SQL_Select = @SQL_Select + '',b'' + Convert(varchar(10),@ColCode)

Select @SQL_SetDefaultValues = @SQL_SetDefaultValues + ''Select @b'' + Convert(varchar(10),@ColCode) + '' = ''''''''

''

FETCH NEXT FROM The_I  INTO @ColCode

End

CLOSE The_I

DEALLOCATE The_I

--得到动态交叉表的创建语句

--例如:Declare @AcrossTable Table(a nvarchar(100),b1 nvarchar(100),b2 nvarchar(100),b3 nvarchar(100),b4 nvarchar(100),b5 nvarchar(100) )

Select @SQL_Create = @SQL_Create + '' )''

--得到动态交叉表的Insert语句前半部分

--例如: Insert into @AcrossTable (a,b1,b2,b3,b4,b5 )

Select @SQL_Insert = @SQL_Insert + '' )''

--得到动态交叉表的Insert语句后半部分

--例如: Values ( @a,@b1,@b2,@b3,@b4,@b5 )

Select @SQL_InsertValues = @SQL_InsertValues + '' )''

--得到动态交叉表的Select语句

--例如:Select a,b1,b2,b3,b4,b5,b6 From @AcrossTable

Select @SQL_Select = @SQL_Select + '' From @AcrossTable''

Declare @SQL_InsertX nvarchar(2000)

Select  @SQL_InsertX = ''''

Declare @SQL_SelectX nvarchar(2000)

Declare @RowCode int

Declare @Value   int

Declare @RowCode_Count int

Declare @Count int

Select  @Count = (Select count(*)  From (Select Distinct From ) a)

Declare The_X Cursor For Select  ,Count(*) From    Group By Order By Asc

OPEN The_X

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

WHILE  @Count > 0

BEGIN

Select @SQL_SelectX = ''Select @a =  '' + Convert(varchar(10),@RowCode) + ''

''

DECLARE The_Y CURSOR FOR

Select ,  From  Where = @RowCode  Order By ASC

OPEN The_Y

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_SelectX = @SQL_SelectX + ''Select @b'' + Convert(varchar(10),@ColCode) + '' = '' + Convert(varchar(10),@Value) + ''

''

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

End

CLOSE The_Y

DEALLOCATE The_Y

Select @Count = @Count - 1

Select @SQL_InsertX = @SQL_InsertX  + ''

''+ @SQL_SelectX + ''

''+ @SQL_Insert + ''

''+ @SQL_InsertValues + ''

''+ @SQL_SetDefaultValues + ''

''

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

End

CLOSE The_X

DEALLOCATE The_X

Select @SQL = @SQL_InsertValuesDeclare + ''

'' + @SQL_Create + ''

'' + @SQL_InsertX + ''

'' + @SQL_Select

Print @SQL

Execute (@SQL )

end

'

Select @CreateSQL = Replace(@CreateSQL,'',@TableName)

Select @CreateSQL = Replace(@CreateSQL,'',@RowName)

Select @CreateSQL = Replace(@CreateSQL,'',@ColumnName)

Select @CreateSQL = Replace(@CreateSQL,'',@Value)

Print @CreateSQL

Execute(@CreateSQL)

End

+=======================================

Create Procedure [dbo].[pCreateProcedure_CrossReport]

@TableName_By_Stat varchar(100) ,

@Stat_Value  varchar(500) ,

@TableName_By_Row varchar(100),

@Stat_RowCode varchar(500) ,

@Row_RowName varchar(500),

@TableName_By_Column varchar(100),

@Stat_ColumnCode varchar(500) ,

@Column_RowName varchar(500)

AS

Begin

--Declare @TableName_By_Stat varchar(100)

--Declare @Stat_Value  varchar(500)

--Declare @TableName_By_Row varchar(100)

--Declare @Stat_RowCode varchar(500)

--Declare @Row_RowName varchar(500)

--Declare @TableName_By_Column varchar(100)

--Declare @Stat_ColumnCode varchar(500)

--Declare @Column_RowName varchar(500)

--

--Select @TableName_By_Stat ='统计生成表'

--Select @Stat_Value  ='统计值'

--Select @TableName_By_Row ='工龄工资标准表'

--Select @Stat_RowCode ='工龄编码'

--Select @Row_RowName ='工龄名称'

--Select @TableName_By_Column ='职称信息表'

--Select @Stat_ColumnCode ='职称编号'

--Select @Column_RowName ='职称名称'

--

--Execute [pCreateProcedure_CrossReport] @TableName_By_Stat ,@Stat_Value ,@TableName_By_Row ,@Stat_RowCode ,@Row_RowName ,@TableName_By_Column ,@Stat_ColumnCode ,@Column_RowName

--execute pGet_Cross_Report_For_统计生成表_By_工龄编码_职称编号

Declare @CreateSQL varchar(8000)

Select @CreateSQL ='

Create Procedure pGet_Cross_Report_For__By__

As

Begin

--CREATE TABLE [](

-- [] [int] IDENTITY(1,1) NOT NULL,

-- [] [nvarchar](40)  NULL

--CREATE TABLE [](

-- [] [int] IDENTITY(1,1) NOT NULL,

-- [] [nvarchar](40)  NULL

--CREATE TABLE [TableName_By_Stat%>](

-- [] [int] NOT NULL,

-- [] [int] NOT NULL,

-- [] [int] NULL,

Declare @SQL        nvarchar(4000)

Declare @SQL_Create nvarchar(2000)

Declare @SQL_Insert nvarchar(2000)

Declare @SQL_InsertValues nvarchar(2000)

Declare @SQL_InsertValuesDeclare nvarchar(2000)

Declare @SQL_Select nvarchar(2000)

Declare @SQL_Title nvarchar(2000)

Declare @SQL_TitleValues nvarchar(2000)

Declare @SQL_SetDefaultValues nvarchar(2000)

Select @SQL_Create = ''Declare @AcrossTable Table(a nvarchar(100)''

Select @SQL_Insert = ''

Insert into @AcrossTable (a''

Select @SQL_InsertValues  = ''Values ( @a''

Select @SQL_InsertValuesDeclare = ''Declare @a nvarchar(100)

''

Select @SQL_Select = ''Select a''

Select @SQL_TitleValues = ''

Select @a = ''''''''''

Select @SQL_SetDefaultValues = ''Select @a = ''''''''

''

Declare @ColCode int

Declare @ColName nvarchar(100)

DECLARE The_I CURSOR FOR Select , From    Order By ASC

OPEN The_I

FETCH NEXT FROM The_I  INTO @ColCode,@ColName

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_TitleValues = @SQL_TitleValues + ''

Select @b'' + Convert(varchar(10),@ColCode) + '' = '''''' + @ColName +''''''''

Select @SQL_Create = @SQL_Create + '',b'' + Convert(varchar(10),@ColCode)+ '' nvarchar(100)''

Select @SQL_Insert = @SQL_Insert + '',b'' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValues = @SQL_InsertValues + '',@b'' + Convert(varchar(10),@ColCode)

Select @SQL_InsertValuesDeclare = @SQL_InsertValuesDeclare + ''Declare @b'' + Convert(varchar(10),@ColCode) + '' nvarchar(100)

''

Select @SQL_Select = @SQL_Select + '',b'' + Convert(varchar(10),@ColCode)

Select @SQL_SetDefaultValues = @SQL_SetDefaultValues + ''Select @b'' + Convert(varchar(10),@ColCode) + '' = ''''''''

''

FETCH NEXT FROM The_I  INTO @ColCode,@ColName

End

CLOSE The_I

DEALLOCATE The_I

--得到动态交叉表的创建语句

--例如:Declare @AcrossTable Table(a nvarchar(100),b1 nvarchar(100),b2 nvarchar(100),b3 nvarchar(100),b4 nvarchar(100),b5 nvarchar(100) )

Select @SQL_Create = @SQL_Create + '' )''

--得到动态交叉表的Insert语句前半部分

--例如: Insert into @AcrossTable (a,b1,b2,b3,b4,b5 )

Select @SQL_Insert = @SQL_Insert + '' )''

--得到动态交叉表的Insert语句后半部分

--例如: Values ( @a,@b1,@b2,@b3,@b4,@b5 )

Select @SQL_InsertValues = @SQL_InsertValues + '' )''

--得到动态交叉表的Select语句

--例如:Select a,b1,b2,b3,b4,b5,b6 From @AcrossTable

Select @SQL_Select = @SQL_Select + '' From @AcrossTable''

--得到动态交叉表的Title语句

--例如:Select @a = ''''

--  Select @b1 = ''员级及以下''

--  Select @b2 = ''初级职称''

--  Select @b3 = ''中级职称''

--  Select @b4 = ''高级职称''

--  Select @b5 = ''正高级(相当于正高级)职称''

--  Insert into @AcrossTable (a,b1,b2,b3,b4,b5 )

--  Values ( @a,@b1,@b2,@b3,@b4,@b5 )

Select @SQL_Title = @SQL_TitleValues + ''

'' + @SQL_Insert + ''

'' + @SQL_InsertValues

Declare @SQL_InsertX nvarchar(2000)

Select  @SQL_InsertX = ''''

Declare @SQL_SelectX nvarchar(2000)

Declare @RowCode int

Declare @Value   int

Declare @RowCode_Count int

Declare @Count int

Select  @Count = Count(*) From

Declare The_X Cursor For Select  ,Count(*) From    Group By Order By Asc

OPEN The_X

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

WHILE  @Count > 0

BEGIN

Select @SQL_SelectX = ''Select @a = From Where = '' + Convert(varchar(10),@RowCode) + ''

''

DECLARE The_Y CURSOR FOR

Select ,  From  Where = @RowCode  Order By ASC

OPEN The_Y

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

WHILE @@FETCH_STATUS = 0

BEGIN

Select @SQL_SelectX = @SQL_SelectX + ''Select @b'' + Convert(varchar(10),@ColCode) + '' = '' + Convert(varchar(10),@Value) + ''

''

FETCH NEXT FROM The_Y  INTO @ColCode,@Value

End

CLOSE The_Y

DEALLOCATE The_Y

Select @Count = @Count - 1

Select @SQL_InsertX = @SQL_InsertX  + ''

''+ @SQL_SelectX + ''

''+ @SQL_Insert + ''

''+ @SQL_InsertValues + ''

''+ @SQL_SetDefaultValues + ''

''

FETCH NEXT FROM The_X  INTO @RowCode,@RowCode_Count

End

CLOSE The_X

DEALLOCATE The_X

Select @SQL = @SQL_InsertValuesDeclare + ''

'' + @SQL_Create + ''

'' + @SQL_Title + ''

'' + @SQL_SetDefaultValues + ''

'' + @SQL_InsertX + ''

'' + @SQL_Select

Print @SQL

Execute (@SQL )

end

'

Select @CreateSQL = Replace(@CreateSQL,'',@TableName_By_Stat)

Select @CreateSQL = Replace(@CreateSQL,'',@Stat_Value)

Select @CreateSQL = Replace(@CreateSQL,'',@TableName_By_Row)

Select @CreateSQL = Replace(@CreateSQL,'',@Stat_RowCode)

Select @CreateSQL = Replace(@CreateSQL,'',@Row_RowName)

Select @CreateSQL = Replace(@CreateSQL,'',@TableName_By_Column)

Select @CreateSQL = Replace(@CreateSQL,'',@Stat_ColumnCode)

Select @CreateSQL = Replace(@CreateSQL,'',@Column_RowName)

Print @CreateSQL

Execute(@CreateSQL)

End

mysql 交叉表 存储过程_用于生成交叉表的存储过程的存储过程相关推荐

  1. mysql 数据展示装置_实时生成数据宽表的方法和装置与流程

    本发明涉及计算机技术领域,尤其涉及一种实时生成数据宽表的方法和装置. 背景技术: 数据仓库是面向主题的.集成的.相对稳定的.随时间不短变化得数据集合,用以支持经营管理中的决策制定.数据仓库中的数据面向 ...

  2. mysql设置外键并一键生成数据表关系图

    文章目录 1.概念 2.理解 3.添加外键时需要注意的规则 4.navicat for mysql中设置外键 5.数据表关系图的创建 1.概念 主键是能确定一条记录的唯一标识. 外键用于与另一张表的关 ...

  3. php mysql新闻表模板_新闻数据库分表案例

    新闻数据库分表案例目录:[-]NetkillerMySQL手札MySQLMariaDB...Mr.NeoChan,陈景峰(BG7NYT)4.16.3.新闻数据库分表案例NetkillerMySQL手札 ...

  4. mysql分库分表风险_数据库分库分表存在的问题及解决方案

    读写分离分散了数据库读写操作的压力,但是没有分散存储压力,当数据库的数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力就会达到瓶颈,主要体现在以下几个方面: 数据量太大,读写性能会下降,即使有 ...

  5. python kfold交叉验证_Python sklearn KFold 生成交叉验证数据集的方法

    源起: 1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求. 2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklea ...

  6. latex自动生成中文目录_自动生成工作表目录三种方法,看哪种适合你?

    如果在一个工作簿内有很多工作表需要去维护管理,一个个的查找显然是很麻烦的,建立一个工作表的导航目录无疑是最便捷的方法. 下面介绍三种生成工作表目录的方法: 一.利用宏表函数生成可导航目录 第1步:定义 ...

  7. python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...

    #! /bin/env python # -*- encoding:gbk -*- """ 用于生成 WebService 使用的 CA 及并且签署证书 "&q ...

  8. mysql数据库建表关键字_关于数据库建表时的有趣实例--关键字重复

    今天 使用CMD连接mysql进行简单的数据库的建表操作.信心满满的写了如下的代码: 然后就爆了个大大的错误 .简直有点莫名其妙的感觉,我是按照昨天学习的步骤写的代码,为什么会出错? 初步开始怀疑: ...

  9. sql语句用变量替换表名_使用内存优化表替换SQL临时表和表变量

    sql语句用变量替换表名 TempDB usage can be considered as a performance bottleneck for workloads that use SQL t ...

最新文章

  1. mysql 查看blob字段大小_MYSQL BLOB 字段大小以及个数的限制测试。
  2. mysql帐号,权限管理
  3. Spring抛出异常_自动装配
  4. oracle每天自增长,oracle的自增长
  5. CoreCLR源码探索(六) NullReferenceException是如何发生的
  6. java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
  7. 快手搜索技术部招聘NLP算法工程师!
  8. war,jar包是啥
  9. 为什么python的命名不能以数字开头,Python模块名称以数字开头
  10. 设计灵感合集|拟人化创意合成小动物,治愈可爱风插画作品
  11. linux shell 无法ssh,linux – BASH和/或.BASHRC在SU或SSH登录后无法正常工作,除非运行“bash”命令...
  12. python基础for循环和while循环(十)
  13. 计算机内存不足吃鸡怎么办,Win10玩吃鸡游戏提示虚拟内存不足怎么办?
  14. 优秀的CSS框架---bootstrap
  15. java url json字符串_Java和PHP的JSON字符串转URL参数方法
  16. Sublime Text 3.1.1 Build 3176 注册码破解
  17. Java单元测试用例的编写
  18. 用Jsoup从网页上抓取中国地区编号转变成Map
  19. 百度热力图颜色说明_基于百度热力图的中国多中心城市分析|上海城市规划
  20. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

热门文章

  1. python 获取二维数组所有元素
  2. 编译原理_P1001
  3. 01-区块链入门之 区块链介绍一-大叔思维
  4. Eclipse+Maven+Spring+CXF 构建webservice 服务
  5. 【WPF】如何获取命令行参数
  6. Spring 4 官方文档学习 Spring与Java EE技术的集成
  7. Jqurey 得到url参数 getUrlParam
  8. Matlab绘图基本控制命令
  9. 基于layui的省市区三级联动(数据交互)
  10. Android DataBinding 从入门到进阶