MENU
エクセルなどでデータを管理している場合に、例えば店舗ごとの売り上げが年度が増えるごとに横に伸びている場合や、アンケート項目が増えるごとに横に伸びることがよくあります。このようなデータ構造を横持ちと言います。今回はPIVOT関数とUNPIVOT関数を使用して横持ちのデータを縦持ちのデータに変換していきます。
なお、Dr.Sumではマウス操作のみで簡単に横持ち⇔縦持ちを変換する機能を持っています。詳細は下記の記事をご覧ください。
データベース設計をする際の「横持ち」と「縦持ち」について、以下のようなメリットとデメリットがあります。
横持ち
メリット
・1レコードに必要な情報が収まるので、見やすい、データ化しやすい(アンケートなど)、検索しやすい
・大量データを処理しやすい
デメリット
・項目を追加する場合、テーブル構造の修正が必要
(例)横持ちデータに2022年度のA店のデータを追加する場合、2022年度のカラムを追加する必要がある縦持ち
メリット
・データが正規化されているため扱いやすい
・項目が追加された場合は行の追加のみで、テーブル構造の修正が必要ない
(例)縦持ちデータに2022年度のA店のデータを追加する場合、2022年度のA店のデータを準備するのみ
デメリット
・1つの情報が複数レコードに分かれるため、横持ちより量が多く、縦に長いデータになる
例えば、連携元のシステムは横持ちのデータとして保持しているが、Dr.Sum では縦持ちのデータとして扱いたい場合は、
Dr.Sum にデータを取り込んだ後にデータ変換(横持ち⇒縦持ち)が必要になります。
ここではデータ変換(横持ち⇔縦持ち)の必要が生じた場合の対応方法について紹介します。
※Dr.Sum Ver. 5.5 の機能を利用しています。Dr.Sum Ver. 5.5 より前のバージョンでは実現できませんのでご注意ください。
横持ち⇒縦持ちへの変換はUNPIVOT関数を使用することで変換できます。
参考までに、UNPIVOT関数を使用したSQL文を掲載します。
SELECT * FROM 横持テーブル UNPIVOT(来客数 FOR 年度 IN(2019年度, 2020年度, 2021年度)) AS 縦持テーブル; |
横持ち⇒縦持ちへの変換はPIVOT関数を使用することで変換できます。
参考までに、UNPIVOT関数を使用したSQL文を掲載します。
SELECT * FROM 縦持テーブル PIVOT(SUM(来客数) FOR 年度 IN(2019 as 2019年度, 2020 as 2020年度, 2021 as 2021年度)) AS 横持テーブル; |
「横持ち」と「縦持ち」のどちらが最適かは連携するシステムによって異なってくるで、ぜひデータ変換(横持ち⇔縦持ち)を活用してください!
Related article
Pick up
Ranking
Info