UNPIVOT``PIVOT
通过将列旋转为行来执行与几乎相反的操作。假设前面的例子中产生的表存储在数据库中pvt
,你要旋转的列标识符Emp1
,Emp2
,Emp3
,Emp4
,和Emp5
成排的值对应于特定供应商。这意味着您必须标识另外两个列。将包含将要旋转的列值(Emp1
,Emp2
…)Employee
的列称为 ,将保存当前位于要旋转的列下的值的列称为订单。这些列对应于 pivot_column 和 value_column 分别在Transact- sql定义中。这是查询。
--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
这是部分结果集。
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
...