Using PIVOT to Transform Data in SQL Server
The SQL Server PIVOT operation allows you to transform data from a wide format to a tall format, making it easier to summarize and analyze data. This is particularly useful in scenarios where you wish to convert data organized in rows and columns into a format where each column represents a specific attribute and each row represents a particular value for that attribute.
An example scenario is the transformation of the following dataset, which has data in a wide format:
Name1 | Name2 | Value -------|-------|------- A | P1 | 1 A | P2 | 1 A | P3 | 2 B | P1 | 3 B | P2 | 1 B | P4 | 1
Into the following format:
A B P1 1 4 P2 1 1 P3 2 NULL P4 NULL 1
To achieve this transformation in SQL Server 2005, the following code can be used:
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 )
This code dynamically assembles a PIVOT query based on the unique values in the Name1 column. It first concatenates the distinct Name1 values into a comma-separated list, which is then used in the PIVOT statement to create the new columns. The SUM() aggregate function calculates the total value for each attribute (Name1) within each row (Name2).
The result is a transformed dataset with the desired tall format, where each column represents a Name1 attribute and each row contains the corresponding sum value for that attribute. This format facilitates data analysis and summarization by providing a more concise and organized view of the data.
The above is the detailed content of How Can SQL Server's PIVOT Function Transform Wide Data to a More Analyzable Format?. For more information, please follow other related articles on the PHP Chinese website!