Följande fråga levererar följande svar: Varför behöver du ha datan på det sättet? Det är troligen enklare att ta en annan approach till problemet. Håller med Christoffer. Dumt att belasta SQL servern med transformeringar.Sortera data
SELECT * FROM #tempTbl
Svar:
Order_Code Name Value SortOrder
330.20-080020-220 ConnSizeMS 27 -2
330.20-080020-220 Mounting 1 -1
330.20-080020-220 DDC 80 1
330.20-080020-220 EE 8 2
330.20-080020-220 BBKW 7 3
Svaret ovan vill jag ha ut vågrätt på en rad
Ex:
Order_Code ConnSizeMS Mounting DDC EE BBKW
330.20-080020-220 27 1 80 8 7
Tanken är att svaret ska hamna i en temporär tabell där det sedan ska bearbetas vidare.
Kan inte klura ut hur jag ska kunna skpa denna tabell dynamiskt!
Värdena under name kan heta i stort sett vad som helst så jag kan inte skapa en färdig tabell som jag hårdkodar in dom i.Sv: Sortera data
Sv: Sortera data
Har antagit att SortOrder är lika och unik för varje kolumn.
DECLARE @SortOrder int
DECLARE @SQL varchar(255)
DECLARE @ColumnName varchar(50)
/*Skapar tabell för resultat*/
CREATE TABLE #tblResult (Order_Code varchar(50))
/*Infogar rader*/
INSERT INTO #tblResult (Order_Code)
SELECT DISTINCT Order_Code FROM Table1
/*Går igenom kolumn för kolumn*/
SELECT TOP 1 @ColumnName = Name, @SortOrder = SortOrder FROM Table1 ORDER BY SortOrder
WHILE @ColumnName IS NOT NULL
BEGIN
SET @SQL = 'ALTER TABLE #tblResult ADD ' + @ColumnName + ' int'
EXEC (@SQL)
SET @SQL = 'UPDATE #tblResult SET ' + @ColumnName + ' = Value
FROM Table1 INNER JOIN #tblResult ON Table1.Order_Code = #tblResult.Order_Code
WHERE Table1.Name = ''' + @ColumnName + ''''
EXEC (@SQL)
SET @ColumnName = Null
SELECT TOP 1 @ColumnName = Name, @SortOrder = SortOrder FROM Table1 WHERE SortOrder > @SortOrder ORDER BY SortOrder
END
SELECT * FROM #tblResult
DROP TABLE #tblResult