Kolla in pivottabeller;
Se http://msdn.microsoft.com/en-us/library/ ms177410.aspx
En enkel fråga för ett ändligt antal StatusTypeNames skulle vara ungefär som;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Observera användningen av MAX. Om det finns en chans att du kommer att ha flera rader med samma månadsnamn och statustypnamnskombination, kanske du vill använda SUM.
För att använda dynamiska kolumner som madhivinan föreslår kan du följa det här exemplet. Bläddra till botten.
Jag försökte få det att fungera med ditt exempel, men eftersom jag hade ett par problem troligen på grund av att jag inte hade tabellerna. Men något i stil med följande är vad du är ute efter.
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)
Det är inte helt rätt, men det är en utgångspunkt.
Lycka till.