2008-12-02 4 views
3

У меня есть устаревшая таблица MS Access 2007, которая содержит 52 поля (1 поле за каждую неделю года), представляющее исторические данные продаж (плюс одно поле за год фактически). Я хотел бы преобразовать эту базу данных в более обычный список времени/значения.Как преобразовать поля в строки через SQL в MS Access 2007 или MS SQL Server 2005

Кто-нибудь знает, как это сделать без написания запросов с 52+ явными параметрами?

(если решение существует в MS SQL Server 2005, можно также экспортировать/импортировать таблицу)

ответ

2

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 
... 
+0

Спасибо за этот ответ. Изучение способов использования PIVOT спасло меня сегодня! – 2008-12-19 19:26:47

2

Как уже упоминалось выше, UNPIVOT оператор, если таковые имеются, будет это делать ... Если это не доступно, то станд SQL подход:

Союз множественного выбора statments (по одному на каждую неделю), что псевдоним столбца конкретной недели с тем же псевдонимом столбца

Select 1 as week, Week1Val as value from Table 
    UNION 
    Select 2 as week, Week2Val as value from Table 
    UNION 
    Select 3 as week, Week3Val as value from Table 
    UNION 
... 
    UNION 
    Select 52 as week, Week52Val as value from Table 
1

Не нужно экспортировать на SQL Server. В Access попробуйте подменю/View/PivotTable View. (Во всяком случае, это мой доступ в 2003 году.) Мне нравится это лучше, чем в Excel.

Смежные вопросы