Hallo zusammen,
ich muss seit einiger Zeit mal wieder einen View bauen und stoße hier an meine Grenzen.
Folgender Fall:
Ausgangstabelle:
Spalte xy Spalte yz 201404 201405 201406 abc def 10 15 20 ghi jkl 11 16 21
Gewünschter View:
Spalte xy Spalte yz Periode Wert abc def 201404 10 abc def 201405 15 abc def 201406 20 ghi jkl 201404 11 ghi jkl 201405 16 ghi jkl 201406 21
Zudem muss das Ganze dynamisch gemacht werden da die Perioden Forecast-Werte sind, und damit jeden Monat eine Spalte verschwindet und eine neue hinzukommt. Das habe ich auch schon hinbekommen und die Werte habe ich mit Unpivot auch schon so da stehen, das heißt soweit bin ich gekommen:
Spalte xy Spalte yz Wert abc def 10 abc def 15 abc def 20 ghi jkl 11 ghi jkl 16 ghi jkl 21
Aber wie ich nun die Spaltennamen(201404 etc.) daneben bekomme habe ich leider keine Ahnung.
Ich hoffe mir kann hier jemand weiterhelfen...
So sieht das bisher aus:
DECLARE @table nvarchar(257) = N'T_TABLENAME', @key_column sysname = N'[xy], [yz]', -- local variables DECLARE @sql NVARCHAR(MAX) = N'', @cols NVARCHAR(MAX) = N''; SELECT @cols += ', [' + COLUMN_NAME + ']' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'T_TABLENAME' AND COLUMN_NAME LIKE '20%'; SELECT @sql = N'SELECT ' + @key_column + ', Forecast FROM ( SELECT ' + @key_column + @cols + ' FROM ' + @table + ' ) AS cp UNPIVOT ( Forecast FOR subject IN (' + STUFF(@cols, 1, 1, '') + ') ) AS up;'; PRINT @sql; --EXEC sp_executesql @sql;Das Ganze ergibt:
SELECT [xy], [yz], Forecast FROM ( SELECT [xy], [yx], [201403], [201404], [201405], [201406], [201407], [201408], [201409], [201410], [201411], [201412] FROM T_DIM_DISTRIBUTION ) AS cp UNPIVOT ( Forecast FOR subject IN ( [201403], [201404], [201405], [201406], [201407], [201408], [201409], [201410], [201411], [201412]) ) AS up;
Vielen Dank im Voraus!
Beste Grüße,
Peter