SQLで縦持ちを横持に変換したいのですが、一般的には以下のような記述でできると思います。(引用です)
しかし今回は、indicatorに入る値が不特定多数です。
下記のSQL文では、indicatorの値をCASE WHENで指定してますが、indicatorの値をSQLで自動で分けてくれるような方法はないのでしょうか?
ちなみにMySQL(MariaDB)で行っております。
どうぞよろしくお願いいたします。
参考URL一部引用
https://book.mynavi.jp/manatee/detail/id=72442行を列に変換する
最初に、行を列に変換する方法を考えてみましょう。SQLにおける列はクエリによって固定的である必要があるため、列に展開されるデータの種類や数が予め判明している場合にのみ、この手法を利用できます。例えば、下記データ例に示す日次KPIデータは、日付ごとに「インプレッション数」「セッション数」「ユーザー数」の3指標の値を1 レコードごとに保持したテーブルです。●データ:日次KPIデータ(daily_kpi)テーブル
dt | indicator | val
------------+-------------+------
2017-01-01 | impressions | 1800
2017-01-01 | sessions | 500
2017-01-01 | users | 200
2017-01-02 | impressions | 2000
2017-01-02 | sessions | 700
2017-01-02 | users | 250
求めている結果
dt | impressions | sessions | users
------------+-------------+----------+-------
2017-01-01 | 1800 | 500 | 200
2017-01-02 | 2000 | 700 | 250
●コード:行で保存された指標の値を列に変換するクエリ
これでは、indicatorの値を全部指定してあげないといけない、、
SELECT dt , MAX(CASE WHEN indicator = 'impressions' THEN val END) AS impressions , MAX(CASE WHEN indicator = 'sessions' THEN val END) AS sessions , MAX(CASE WHEN indicator = 'users' THEN val END) AS users FROM daily_kpi GROUP BY dt ORDER BY dt ;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/20 07:11
2019/05/20 07:46