Podívejte se na kontingenční tabulky;
Viz http://msdn.microsoft.com/en-us/library/ ms177410.aspx
Jednoduchý dotaz na konečný počet StatusTypeNames by byl něco jako;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Všimněte si použití MAX. Pokud existuje možnost, že budete mít více řádků se stejnou kombinací názvu měsíce a názvu typu stavu, možná budete chtít použít SUM.
Chcete-li využívat dynamické sloupce, jak navrhuje madhivinan, můžete sledovat tento příklad. Přejděte dolů.
Snažil jsem se, aby to fungovalo s vaším příkladem, ale protože jsem měl několik problémů, pravděpodobně kvůli tomu, že jsem neměl tabulky. Jde vám však o něco jako následující.
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)
Není to úplně správné, ale je to výchozí bod.
Hodně štěstí.