Kiểm tra bảng tổng hợp;
Xem http://msdn.microsoft.com/en-us/library/ ms177410.aspx
Một truy vấn đơn giản cho một số lượng hữu hạn StatusTypeNames sẽ giống như;
SELECT * FROM
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName
Lưu ý sử dụng MAX. Nếu có khả năng bạn sẽ có nhiều hàng với sự kết hợp tên tháng và tên trạng thái giống nhau, thì bạn có thể muốn sử dụng SUM.
Để sử dụng các cột động như madhivinan đề xuất, bạn có thể theo dõi ví dụ này. Cuộn xuống dưới cùng.
Tôi đã cố gắng làm cho nó hoạt động với ví dụ của bạn, nhưng vì tôi gặp một số vấn đề có thể do thực tế là tôi không có bảng. Tuy nhiên, những thứ như sau là điều bạn đang theo đuổi.
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)
Nó không hoàn toàn đúng, nhưng đó là một điểm khởi đầu.
Chúc các bạn thành công.