Как преобразовать поля в строки через SQL в MS Access 2007 или MS SQL Server 2005 - PullRequest
3 голосов
/ 02 декабря 2008

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

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

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

Ответы [ 3 ]

2 голосов
/ 02 декабря 2008

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

Объединение нескольких выбранных операторов (по одному на каждую неделю), которые имеют псевдоним столбца конкретной недели с тем же псевдонимом имени столбца

  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
2 голосов
/ 02 декабря 2008

Использование PIVOT и 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
...
1 голос
/ 02 декабря 2008

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

...