_覓 | 覦覈襦 | 豕蠏手 | 殊螳 | 譯殊碁 |
FrontPage › DinamicPivot
|
|
Describe DinamicPivot here
http://sqlblogcasts.com/blogs/madhivanan/archive/2007/08/27/dynamic-crosstab-with-multiple-pivot-columns.aspx
CREATE procedure CrossTab ( @select varchar(2000), @PivotCol varchar(100), @Summaries varchar(100), @GroupBy varchar(100), @OtherCols varchar(100) = Null ) AS set nocount on set ansi_warnings off declare @sql varchar(8000) Select @sql = '' Select @OtherCols= isNull(', ' + @OtherCols,'') create table #pivot_columns (pivot_column_name varchar(100)) Select @sql='select ''' + replace( + @PivotCol,',',''' as pivot_column_name union all select ''')+'''' insert into #pivot_columns exec(@sql) select @sql='' create table #pivot_columns_data (pivot_column_name varchar(100),pivot_column_data varchar(100)) Select @PivotCol='' Select @PivotCol=min(pivot_column_name) from #pivot_columns While @PivotCol>'' Begin insert into #pivot_columns_data(pivot_column_name,pivot_column_data) exec ( 'select distinct ''' + @PivotCol +''' as pivot_column_name, convert(varchar(100),' + @PivotCol + ') as pivot_column_data from ('+ @select +' ) T' ) Select @PivotCol=min(pivot_column_name) from #pivot_columns where pivot_column_name>@PivotCol end select @sql = @sql + ', ' + replace( replace( @Summaries,'(','(CASE WHEN ' + Pivot_Column_name + '=''' + pivot_column_data + ''' THEN ' ), ')[', ' END) as [' + pivot_column_data ) from #pivot_columns_data order by pivot_column_name exec ( 'select ' + @GroupBy +@OtherCols +@sql + ' from ( '+ @select +' ) T GROUP BY ' + @GroupBy ) drop table #pivot_columns drop table #pivot_columns_data set nocount off set ansi_warnings on exec crosstab '貎朱Μ', '貉', '讌螻집계컬럼명', '襦'
http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables
CREATE PROCEDURE crosstab @select varchar(8000), @sumfunc varchar(100), @pivot varchar(100), @table varchar(100) AS DECLARE @sql varchar(8000), @delim varchar(1) SET NOCOUNT ON SET ANSI_WARNINGS OFF EXEC ('SELECT ' + @pivot + ' AS pivot INTO ##pivot FROM ' + @table + ' WHERE 1=2') EXEC ('INSERT INTO ##pivot SELECT DISTINCT ' + @pivot + ' FROM ' + @table + ' WHERE ' + @pivot + ' Is Not Null') SELECT @sql='', @sumfunc=stuff(@sumfunc, len(@sumfunc), 1, ' END)' ) SELECT @delim=CASE Sign( CharIndex('char', data_type)+CharIndex('date', data_type) ) WHEN 0 THEN '' ELSE '''' END FROM tempdb.information_schema.columns WHERE table_name='##pivot' AND column_name='pivot' SELECT @sql=@sql + '''' + convert(varchar(100), pivot) + ''' = ' + stuff(@sumfunc,charindex( '(', @sumfunc )+1, 0, ' CASE ' + @pivot + ' WHEN ' + @delim + convert(varchar(100), pivot) + @delim + ' THEN ' ) + ', ' FROM ##pivot DROP TABLE ##pivot SELECT @sql=left(@sql, len(@sql)-1) SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' + @sql + ' ') EXEC (@select) SET ANSI_WARNINGS ON http://sqlblogcasts.com/blogs/madhivanan/archive/2008/08/27/dynamic-pivot-in-sql-server-2005.aspx
create procedure dynamic_pivot ( @select varchar(2000), @PivotCol varchar(100), @Summaries varchar(100) ) as declare @pivot varchar(max), @sql varchar(max) select @select =replace(@select,'select ','select '+@PivotCol+' as pivot_col,') create table #pivot_columns (pivot_column varchar(100)) Select @sql='select distinct pivot_col from ('+@select+') as t' insert into #pivot_columns exec(@sql) select @pivot=coalesce(@pivot+',','')+'['+pivot_column+']'from #pivot_columns select @sql= ' select * from ( '+@select+' ) as t pivot ( '+@Summaries+' for pivot_col in ('+@pivot+') ) as p ' exec(@sql)
鏤
|
襷 螳 瑚 企 ()讌 覈詩. 蠏瑚 ろ 蟆 覃 襴糾 . ( 讌) |