Dai un'occhiata alle tabelle pivot;
Vedere http://msdn.microsoft.com/en-us/library/ ms177410.aspx
Una semplice query per un numero finito di StatusTypeNames sarebbe qualcosa del tipo;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Notare l'uso di MAX. Se è possibile che tu abbia più righe con la stessa combinazione nomemese e nometipo di stato, potresti voler utilizzare SUM.
Per utilizzare le colonne dinamiche come suggerisce madhivinan, puoi seguire questo esempio. Scorrere fino alla fine.
Ho provato a farlo funzionare con il tuo esempio, ma poiché ho avuto un paio di problemi probabilmente dovuti al fatto che non avevo le tabelle. Tuttavia, qualcosa come il seguente è ciò che stai cercando.
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)
Non è proprio giusto, ma è un punto di partenza.
Buona fortuna.