Quantcast
Channel: Für Entwickler: SQL Server Forum
Viewing all articles
Browse latest Browse all 1772

Unpivot mit Werten und Spaltennamen

$
0
0

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



Viewing all articles
Browse latest Browse all 1772


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>