Tjek pivottabeller;
Se http://msdn.microsoft.com/en-us/library/ ms177410.aspx
En simpel forespørgsel efter et begrænset antal StatusTypeNames ville være noget i stil med;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Bemærk brugen af MAX. Hvis der er en chance for, at du vil have flere rækker med den samme kombination af månedsnavn og statustypenavn, så vil du måske bruge SUM.
For at gøre brug af dynamiske kolonner, som madhivinan foreslår, kan du følge dette eksempel. Rul til bunden.
Jeg forsøgte at få det til at fungere med dit eksempel, men fordi jeg havde et par problemer, skyldes det sandsynligvis, at jeg ikke havde tabellerne. Men noget som det følgende er, hvad du leder 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 er ikke helt rigtigt, men det er et udgangspunkt.
Held og lykke.