便利だなと思ったことを呟くだけ-SQL
2017/06/10
serori
シリーズ化するかもしれないししないかもしれない。
ちょっといいな、便利だなと思ったことを呟くだけ。
はっきり言って初心者向けですのであしからず。(技術系弱いんですよ…)
今回はSQL ServerのPIVOT、UNPIVOTです。
PIVOT→行を列に変換(しつつ集計したり)
UNPIVOT→列を行に変換(しつつ集計したり)
まあ要するに縦横変換です。
【売上テーブル】
↓
DBからデータを取得するとき、えらい面倒な抜き方要求されることって多くないですか。
元のテーブル設計がおかしいだろ!と言っても始まらないので、何とか抜く必要あある。そんな時。
役に立つのが、データ項目の縦横を変更しつつ集計してくれる、PIVOT、UNPIVOTです。
データの加工なんてやろうと思えばどうにでもなります。カーソルループして加工して一時テーブルに入れてそれをまた加工して…。
とはいえそんな長いソース見にくい!
後個人的にカーソル嫌い!(データ多いと死ぬほど重いですからね、SQL Server…Oracleで10分の処理が50分かかるとかザラですよ…。SQL Serverでのチューニングは色々苦労したのでまた今度語るかもしれません)
その点、PIVOT、UNPIVOTを使うとすっきり。一発で抜けたりします。
上記の抜き方をするには、
SELECT *
FROM 売上テーブル
PIVOT (
SUM(売上数) FOR 売上月 IN ([1月], [2月], [3月])
)
…カナ?(おい)
…ええ、私も毎回調べつつしか書けないんで、ググったらいくらでも出てきます(笑)
UNPIVOTについては調べていただければ!
最初よく分からなくても、動かしつつSQL書いていればなんとなく出来ます。そんなものです。
とりあえずこういうことができるとだけ分かっていれば、役に立つものです。
それではー。