Here is a dynamic SQL query that will fix the problem:
DECLARE @columns NVARCHAR(2000) SELECT @columns = COALESCE(@columns + ',[' + [Column2] + ']', '[' + [Column2] + ']') FROM TableName ORDER BY [Column2] --print @columns DECLARE @SqlQuery nvarchar(4000) set @SqlQuery = 'select [Column1],' + @cols + ' into dbo.NewTable from (select [Column1],[Column2], [Column3] from TableName) p PIVOT (MAX([Column3]) FOR [Column2] in (' + @columns + ') ) AS pvt order by [Column1]' --print @SqlQuery execute (@SqlQuery)
I recommend adding this as an 'Execute SQL Task' in your Control Flow - even if it means using a Staging Table. Will Allow for a change in columns and everything!
One more thing! Notice the 'into dbo.NewTable'. You'll need to drop that table before performing this task. This will allow for a change to the dynamic columns. Dynamic column queries such as this are great even if the columns are fixed.
I've just done one where there were 50 columns after the pivot and I don't have time to be defining and writing all that extra code! It is espcially irritating in SQL (before SQL Server 2012 - which I understand takes care of tasks such as this much better!).
Good luck.
No comments:
Post a Comment