mysql 交叉表 存储过程_用于生成交叉表的存储过程的存储过程
以前总是在网上搜一些交叉表生成的相关代码 但是使用起来总是很复杂 看看 刚出炉的东西对你来说是不是有所帮助 :_)
先看看下一个生成的存储过程 :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 交叉表 存储过程_用于生成交叉表的存储过程的存储过程相关推荐
- mysql 数据展示装置_实时生成数据宽表的方法和装置与流程
本发明涉及计算机技术领域,尤其涉及一种实时生成数据宽表的方法和装置. 背景技术: 数据仓库是面向主题的.集成的.相对稳定的.随时间不短变化得数据集合,用以支持经营管理中的决策制定.数据仓库中的数据面向 ...
- mysql设置外键并一键生成数据表关系图
文章目录 1.概念 2.理解 3.添加外键时需要注意的规则 4.navicat for mysql中设置外键 5.数据表关系图的创建 1.概念 主键是能确定一条记录的唯一标识. 外键用于与另一张表的关 ...
- php mysql新闻表模板_新闻数据库分表案例
新闻数据库分表案例目录:[-]NetkillerMySQL手札MySQLMariaDB...Mr.NeoChan,陈景峰(BG7NYT)4.16.3.新闻数据库分表案例NetkillerMySQL手札 ...
- mysql分库分表风险_数据库分库分表存在的问题及解决方案
读写分离分散了数据库读写操作的压力,但是没有分散存储压力,当数据库的数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力就会达到瓶颈,主要体现在以下几个方面: 数据量太大,读写性能会下降,即使有 ...
- python kfold交叉验证_Python sklearn KFold 生成交叉验证数据集的方法
源起: 1.我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求. 2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklea ...
- latex自动生成中文目录_自动生成工作表目录三种方法,看哪种适合你?
如果在一个工作簿内有很多工作表需要去维护管理,一个个的查找显然是很麻烦的,建立一个工作表的导航目录无疑是最便捷的方法. 下面介绍三种生成工作表目录的方法: 一.利用宏表函数生成可导航目录 第1步:定义 ...
- python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...
#! /bin/env python # -*- encoding:gbk -*- """ 用于生成 WebService 使用的 CA 及并且签署证书 "&q ...
- mysql数据库建表关键字_关于数据库建表时的有趣实例--关键字重复
今天 使用CMD连接mysql进行简单的数据库的建表操作.信心满满的写了如下的代码: 然后就爆了个大大的错误 .简直有点莫名其妙的感觉,我是按照昨天学习的步骤写的代码,为什么会出错? 初步开始怀疑: ...
- sql语句用变量替换表名_使用内存优化表替换SQL临时表和表变量
sql语句用变量替换表名 TempDB usage can be considered as a performance bottleneck for workloads that use SQL t ...
最新文章
- mysql 查看blob字段大小_MYSQL BLOB 字段大小以及个数的限制测试。
- mysql帐号,权限管理
- Spring抛出异常_自动装配
- oracle每天自增长,oracle的自增长
- CoreCLR源码探索(六) NullReferenceException是如何发生的
- java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc
- 快手搜索技术部招聘NLP算法工程师!
- war,jar包是啥
- 为什么python的命名不能以数字开头,Python模块名称以数字开头
- 设计灵感合集|拟人化创意合成小动物,治愈可爱风插画作品
- linux shell 无法ssh,linux – BASH和/或.BASHRC在SU或SSH登录后无法正常工作,除非运行“bash”命令...
- python基础for循环和while循环(十)
- 计算机内存不足吃鸡怎么办,Win10玩吃鸡游戏提示虚拟内存不足怎么办?
- 优秀的CSS框架---bootstrap
- java url json字符串_Java和PHP的JSON字符串转URL参数方法
- Sublime Text 3.1.1 Build 3176 注册码破解
- Java单元测试用例的编写
- 用Jsoup从网页上抓取中国地区编号转变成Map
- 百度热力图颜色说明_基于百度热力图的中国多中心城市分析|上海城市规划
- SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)