Using PIVOT and UNPIVOT.
UNPIVOT
performs almost the reverse
operation of PIVOT
, by rotating
columns into rows. Suppose the table
produced in the previous example is
stored in the database as pvt
, and you
want to rotate the column identifiers
Emp1
, Emp2
, Emp3
, Emp4
, and Emp5
into
row values that correspond to a
particular vendor. This means that you
must identify two additional columns.
The column that will contain the
column values that you are rotating
(Emp1
, Emp2
,...) will be called
Employee
, and the column that will
hold the values that currently reside
under the columns being rotated will
be called Orders. These columns
correspond to the *pivot_column* and
*value_column*, respectively, in the
Transact-SQL definition. Here is the
query.
--Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int)
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4)
INSERT INTO pvt VALUES (2,4,1,5,5,5)
INSERT INTO pvt VALUES (3,4,3,5,4,4)
INSERT INTO pvt VALUES (4,4,2,5,5,4)
INSERT INTO pvt VALUES (5,5,1,5,5,5)
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM
(SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
FROM pvt) p
UNPIVOT
(Orders FOR Employee IN
(Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt
GO
Here is a partial result set.
VendorID Employee Orders
1 Emp1 4
1 Emp2 3
1 Emp3 5
1 Emp4 4
1 Emp5 4
2 Emp1 4
2 Emp2 1
2 Emp3 5
2 Emp4 5
2 Emp5 5
...