On 2000, this is the way I've been using to pivot tables like this. (using you table guide for data).This only works if you have unique QTY and Price info (you don't have duplicate qty 12 for instance..Try it and see.IF object_Id('tempdb..#prePivot') IS NOT NULL DROP TABLE #prePivotIF object_Id('tempdb..#results') IS NOT NULL DROP TABLE #resultsCREATE TABLE #prePivot ( [ID] INT , [Qty] INT , [Price] MONEY )CREATE TABLE #results ( [ID] INT )INSERT INTO #prePivotSELECT 1, 12, 100UNION SELECT 1, 24, 90UNION SELECT 1, 36, 80UNION SELECT 2, 13, 120UNION SELECT 2, 26, 100DECLARE @sql VARCHAR(8000)DECLARE @pivot INTDECLARE pivotCursor CURSOR LOCAL READ_ONLY FORSELECT DISTINCT [Qty]FROM #prePivotOPEN pivotCursor FETCH NEXT FROM pivotCursor INTO @pivot WHILE (@@FETCH_STATUS = 0) BEGIN SET @sql = ' ALTER TABLE #results ADD [' + CAST(@pivot AS VARCHAR(50)) + '] INT' EXEC (@sql) FETCH NEXT FROM pivotCursor INTO @pivot ENDCLOSE pivotCursorINSERT INTO #results ([ID])SELECT DISTINCT [ID] FROM #prePivotOPEN pivotCursor FETCH NEXT FROM pivotCursor INTO @pivot WHILE (@@FETCH_STATUS = 0) BEGIN SET @sql = ' UPDATE #results SET [' + CAST(@pivot AS VARCHAR(50)) + '] = pp.[Price] FROM #prePivot pp WHERE pp.[Qty] = ' + CAST(@pivot AS VARCHAR(50)) + ' AND pp.[ID] = #results.[ID]' EXEC (@sql) FETCH NEXT FROM pivotCursor INTO @pivot ENDCLOSE pivotCursorDEALLOCATE pivotCursorSELECT * FROM #results
-------------Charlie