MS Access 2007またはMS SQL Server 2005でSQLを使用してフィールドを行に変換する方法

StackOverflow https://stackoverflow.com/questions/334571

質問

過去の販売データを表す52のフィールド(年の各週に1つのフィールド)を含むレガシーMS Access 2007テーブルがあります(実際にはその年の1つのフィールド)。このデータベースをより一般的な時間/値リストに変換したいと思います。

52以上の明示的なパラメータを使用してクエリを記述することなく、その方法を知っている人はいますか

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

役に立ちましたか?

解決

PIVOTおよびUNPIVOTの使用

  

UNPIVOT はほぼ逆の動作をします   回転による PIVOT の操作   列を行に。テーブルを仮定します   前の例で生成されたものは    pvt としてデータベースに保存され、そして   列識別子を回転させたい    Emp1 Emp2 Emp3 Emp4 、および Emp5   に対応する行の値   特定のベンダー。これは、あなたが   2つの追加列を識別する必要があります。   を含む列   回転している列の値   ( 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
...

他のヒント

前述のように、UNPIVOT演算子が使用可能な場合、これを実行します...これが使用できない場合、std 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のものよりも気に入っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top