過去の売上データを表す 52 個のフィールド (その年の各週に 1 つのフィールド) (および実際にはその年の 1 つのフィールド) を含む従来の MS Access 2007 テーブルがあります。このデータベースをより従来型の時間/値リストに変換したいと考えています。
52以上の明示的なパラメータでクエリを書かずにそれを行う方法を知っている人はいますか?
(MS SQL Server 2005 にソリューションが存在する場合は、テーブルをエクスポート/インポートすることもできます)
過去の売上データを表す 52 個のフィールド (その年の各週に 1 つのフィールド) (および実際にはその年の 1 つのフィールド) を含む従来の MS Access 2007 テーブルがあります。このデータベースをより従来型の時間/値リストに変換したいと考えています。
52以上の明示的なパラメータでクエリを書かずにそれを行う方法を知っている人はいますか?
(MS SQL Server 2005 にソリューションが存在する場合は、テーブルをエクスポート/インポートすることもできます)
UNPIVOT
PIVOT
は、列を行に回転することにより、のほぼ逆の操作を実行します。前の例で生成されたテーブルが としてデータベースに格納されており、列識別子、、、、およびを特定のベンダーに対応する行の値pvt
にローテーションすると します。これは、追加の 2 つの列を識別する必要があることを意味します。ローテーションする列の値 ( 、、...) を含む列は と呼ばれ 、ローテーションされる列の下に現在存在する値を保持する列は Orders と呼ばれます。これらの列は、pivot_columnおよび value_columnに対応します。Emp1
Emp2
Emp3
Emp4
Emp5
Emp1
Emp2
Employee
、それぞれ、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
...
上記のように、UNPIVOT 演算子が利用可能な場合はこれを行います...これが利用できない場合、標準 SQL アプローチは次のとおりです。
特定の週の列を同じ列名の別名で別名化する、複数の選択ステートメント (週ごとに 1 つ) を結合します。
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
SQL Server にエクスポートする必要はありません。Access で、/View/PivotTable View サブメニューを試してください。(少なくとも、私の Access 2003 にはあります。) Excel のものよりも気に入っています。