Using PIVOT and UNPIVOT.
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
...
Спасибо за этот ответ. Изучение способов использования PIVOT спасло меня сегодня! – 2008-12-19 19:26:47