Разгледайте осеви таблици;
Вижте http://msdn.microsoft.com/en-us/library/ ms177410.aspx
Една проста заявка за краен брой StatusTypeNames би била нещо като;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Обърнете внимание на използването на MAX. Ако има вероятност да имате няколко реда с една и съща комбинация от име на месец и име на статус, тогава може да искате да използвате SUM.
За да използвате динамични колони, както предлага madhivinan, можете да следвате този пример. Превъртете до дъното.
Опитах се да го накарам да работи с вашия пример, но тъй като имах няколко проблема, вероятно поради факта, че нямах таблиците. Обаче преследвате нещо като следното.
DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT @listCol = SELECT STUFF (( SELECT DISTINCT '],[' +
StatusTypeName FROM @ResultsTable ORDER BY '],[' +
StatusTypeName FOR XML PATH ('')), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(SELECT MonthNameCol, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ('[email protected]+')) AS pvt ORDER BY MonthNameCol'
EXECUTE (@query)
Не е съвсем правилно, но е отправна точка.
Успех.