Sprawdź tabele przestawne;
Zobacz http://msdn.microsoft.com/en-us/library/ ms177410.aspx
Proste zapytanie dla skończonej liczby StatusTypeNames wyglądałoby mniej więcej tak;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Zwróć uwagę na użycie MAX. Jeśli istnieje prawdopodobieństwo, że będziesz mieć wiele wierszy z tą samą kombinacją nazwy miesiąca i nazwy typu statusu, możesz użyć opcji SUMA.
Aby skorzystać z dynamicznych kolumn, jak sugeruje madhivinan, możesz śledzić ten przykład. Przewiń w dół.
Próbowałem zmusić go do pracy z twoim przykładem, ale ponieważ miałem kilka problemów, prawdopodobnie z powodu braku tabel. Jednak coś takiego jak poniżej jest tym, czego szukasz.
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)
To nie do końca prawda, ale jest to punkt wyjścia.
Powodzenia.