Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
mdelgado
Posting Yak Master
141 Posts |
Posted - 2002-05-24 : 15:28:44
|
I've been staring at his code for about 45 minutes now and I can't figure out how to modify it so that it creates a table from the final crosstab.Rather than run a select statement and display the results, I need to have the code create a table named robvolkcrosstab.any help would be much appreciated.[url]http://www.sqlteam.com/Forums/topic.asp?TOPIC_ID=6216[/url]thanks! |
|
robvolk
Most Valuable Yak
15732 Posts |
Posted - 2002-05-24 : 16:51:32
|
quote: I've been staring at his code for about 45 minutes now
As Mike Femenella will tell you, prolonged exposure to my code is REALLY REALLY BAD. You might want to check out a good therapist afterwards. I remember someone asking this before, and I thought it was posted in the comments, but here it is:CREATE PROCEDURE crosstab @select varchar(8000),@sumfunc varchar(100), @pivot varchar(100), @table varchar(100) ASDECLARE @sql varchar(8000), @delim varchar(1)SET NOCOUNT ONSET ANSI_WARNINGS OFFEXEC ('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 ##pivotDROP TABLE ##pivotSELECT @sql=left(@sql, len(@sql)-1)SELECT @select=stuff(@select, charindex(' FROM ', @select)+1, 0, ', ' + @sql + ' INTO tableName ')EXEC (@select)SET ANSI_WARNINGS ONThe part highlighted in red does the trick, just change the table name to whatever you want. |
 |
|
mdelgado
Posting Yak Master
141 Posts |
Posted - 2002-05-24 : 16:58:35
|
Awesome!Thank you sir. |
 |
|
|
|
|
|
|