Vì bạn đang sử dụng SQL Server 2005, đây là mã:
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Name1])
FROM myTable FOR XML PATH('') ), 1, 1, '')
SET @sqlquery = 'SELECT * FROM
(SELECT Name2, Name1, Value
FROM myTable ) base
PIVOT (Sum(Value) FOR [Name1]
IN (' + @cols + ')) AS finalpivot'
EXECUTE ( @sqlquery )
Điều này sẽ hoạt động cho dù bạn có bao nhiêu trạng thái khác nhau. Nó kết hợp động một truy vấn với PIVOT
. Cách duy nhất bạn có thể thực hiện PIVOT với các cột động là tập hợp động truy vấn, có thể được thực hiện trong SQL Server.
Các ví dụ khác:
- Tổng hợp dữ liệu trong T-SQL
- Làm cách nào để tạo một bản tóm tắt bằng cách tham gia vào một bảng duy nhất với SQL Server?
- https://stackoverflow.com/q/8248059/570191