Let's have some fun.
Who can pivot this without using a cursor? I have a resultset from my OPENXML() function such as this statement puts out:declare @t as table (InstanceID Int, ColumnName Sysname, Datatype VARCHAR(20), Value VARCHAR(MAX));insert into @t (InstanceID, ColumnName, Datatype, Value) values (1, 'Name', 'Varchar( 50)', 'George'), (1, 'City', 'Varchar(100)', 'Bremerton'), (1, 'Children', 'INT', '3'), (20, 'Name', 'Varchar( 50)', 'Tom'), (20, 'City', 'Varchar(100)', 'Bremerton'), (20, 'Children', 'INT', '3'), (33, 'Name', 'Varchar( 50)', 'Suzy'), (33, 'City', 'Varchar(100)', 'Seattle'), (33, 'Children', 'INT', '3'), (44, 'Name', 'Varchar( 50)', 'Kris'), (44, 'City', 'Varchar(100)', 'Silverdale'), (44, 'Children', 'INT', '0'), (52, 'Name', 'Varchar( 50)', 'Joe'), (52, 'City', 'Varchar(100)', 'Boston'), (52, 'Children', 'INT', '1') select * from @t
I need a result set such as this statement puts out: SELECT CAST('George' AS Varchar( 50)) AS [Name] , CAST('Bremerton' AS Varchar(100)) AS [City] , CAST('3' AS INT) AS [Children] union all select CAST('Tom' AS Varchar( 50)) AS [Name] , CAST('Bremerton' AS Varchar(100)) AS [City] , CAST('3' AS INT) AS [Children] union all select CAST('Suzy' AS Varchar( 50)) AS [Name] , CAST('Seattle' AS Varchar(100)) AS [City] , CAST('3' AS INT) AS [Children] union all select CAST('Kris' AS Varchar( 50)) AS [Name] , CAST('Silverdale' AS Varchar(100)) AS [City] , CAST('0' AS INT) AS [Children] union all select CAST('Joe' AS Varchar( 50)) AS [Name] , CAST('Boston' AS Varchar(100)) AS [City] , CAST('1' AS INT) AS [Children]I would prefer this be done by PIVOT or UNPIVOT, but I don't know how to do that. This doesn't have to be done by text manipulation, but here is an example of how you would if you had to.DECLARE @STMT VARCHAR(MAX)SET @STMT = 'SELECT 'SELECT @STMT = @STMT + CASE VALUE WHEN '' THEN ', NULL' ELSE ', CAST(''' + VALUE + ''' AS ' + DATATYPE + ')' END + ' AS [' + COLUMNNAME + ']' FROM @TSET @STMT = REPLACE(@STMT, 'SELECT ,' , 'SELECT ' )EXEC MASTER..SP_SQLEXEC @STMTGO~ Shaun MerrillSeattle area