It's not urgent -- I'm sure your server is not on fire.Reccomendations: 1) Don't store data like this. Don't keep multiple values in the same row. Split them into multiple rows. 2) Don't do this in the db. It's a lot easier in the display layer.Here's the kind of crazy you have to do to dynamically pivot this. As you can see it's pretty horrible.-- Arnold Fribble's splitterCREATE FUNCTION test.AFSplit (@sep char(1), @s varchar(512))RETURNS tableASRETURN ( WITH Pieces(pn, start, stop) AS ( SELECT 1, 1, CHARINDEX(@sep, @s) UNION ALL SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) FROM Pieces WHERE stop > 0 ) SELECT pn, SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s FROM Pieces )GOIF OBJECT_ID('tempDb..#sample') IS NOT NULL DROP TABLE #sampleCREATE TABLE #sample ([Name] VARCHAR(10), [Value] VARCHAR(8000))INSERT #sample VALUES ('Brand1', 'A,B,C,D') , ('Categ1', 'A,B,C') , ('Brand2', 'E,F,G') , ('ExtraRowA', 'HI THERE')DECLARE @sql NVARCHAR(MAX)SET @sql = N'SELECT [RowInd]'SELECT @sql = @sql + N' , MAX(CASE WHEN [Name] = ''' + [Name] + ''' THEN [splitValue] ELSE NULL END) AS [' + [Name] + ']' FROM ( SELECT DISTINCT [Name] FROM #Sample ) AS sORDER BY s.[Name]SET @sql = @sql + 'FROM ( SELECT s.[Name] AS [Name] , t.[s] AS [SplitValue] , ROW_NUMBER() OVER ( PARTITION BY s.[Name] ORDER BY t.[s] ) AS [RowInd] FROM #sample AS s CROSS APPLY test.AFSplit ( '','', s.[Value] ) AS t ) AS pivGROUP BY piv.[RowInd]'PRINT @sqlEXEC sp_executeSql @sqlGODROP FUNCTION test.AFSplit