3

過去の売上データを表す 52 個のフィールド (その年の各週に 1 つのフィールド) (および実際にはその年の 1 つのフィールド) を含む従来の MS Access 2007 テーブルがあります。このデータベースをより従来型の時間/値リストに変換したいと考えています。

52以上の明示的なパラメータでクエリを書かずにそれを行う方法を知っている人はいますか?

(MS SQL Server 2005 にソリューションが存在する場合は、テーブルをエクスポート/インポートすることもできます)

4

3 に答える 3

2

PIVOT と UNPIVOT を使用します。

UNPIVOTPIVOTは、列を行に回転することにより、のほぼ逆の操作を実行します。前の例で生成されたテーブルが としてデータベースに格納されており、列識別子、、、、およびを特定のベンダーに対応する行の値pvtにローテーションすると します。これは、追加の 2 つの列を識別する必要があることを意味します。ローテーションする列の値 ( 、、...) を含む列は と呼ばれ 、ローテーションされる列の下に現在存在する値を保持する列は Orders と呼ばれます。これらの列は、pivot_columnおよび value_columnに対応します。Emp1Emp2Emp3Emp4Emp5Emp1Emp2Employee、それぞれ、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
...
于 2008-12-02T16:27:16.923 に答える
2

上記のように、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
于 2008-12-02T16:28:27.390 に答える
1

SQL Server にエクスポートする必要はありません。Access で、/View/PivotTable View サブメニューを試してください。(少なくとも、私の Access 2003 にはあります。) Excel のものよりも気に入っています。

于 2008-12-02T16:36:13.787 に答える