1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASTERIA WARPでデータを縦持ちから横持ちに変換するには

Last updated at Posted at 2017-09-05

うまくいかなかったケース

ASTERIA WARP 逆引きリファレンス
この本にも載っていなかったので、

ひとまず、↓の記事の
[SQL]データの縦持ち、横持ちを入れ替える
"縦持ちのデータを横持ちに入れ替える"を読んでいただきたいです。

これをASTERIAで実行するには?

経理では、データを縦持ちでDBに格納することが多いです。
(金額情報を1レコードに一つにすると見やすいから)

// 勘定科目名,金額
売上,1000     // 1月度
売上,1500     // 2月度
売原,500      // 1月度
売原,600      // 2月度
販管費,100    // 2月度
販管費,150    // 2月度 
販管費,100    // 3月度

↓ 以下の形で変換したい。

// 勘定科目名,1月度,2月度,3月度
売上,1000,1500,null
売原,500,600,null
販管費,100,150,100

注意点は、金額が、科目と期間でソート済みであること。

上記URLの"縦持ちのデータを横持ちに入れ替える"のサブクエリを実行すると

RecordSQL1
SELECT
field[1]
,field[2]
,row_number() over (PARTITION BY field[1]) 
FROM
in[1]

qiita20170905-1.png

と怒られてしまいます。
どうやらPARTITION句はASTERIAのRecordSQLでは非対応のようです。

うまくいったケース

SQL で縦横変換まとめ(pivot と unpivot)
例。

// 勘定科目名,期間名,金額
売上,1月度,1000
売原,1月度,500
販管費,2月度,100
売上,2月度,1500
売原,2月度,600
販管費,2月度,150
販管費,3月度,100

注意すべてき点は、1列目は縦のキー,2列目は横のキー,3列目(以降)はデータ部。

↓ 以下の形で変換したい。

// 勘定科目名,1月度,2月度,3月度
売上,1000,1500,null
売原,500,600,null
販管費,100,150,100

これをASTERIAで実行すると

RecordSQL2
SELECT
field[1]
,max(CASE WHEN field[2] = '1月度' THEN field[3] END)
,max(CASE WHEN field[2] = '2月度' THEN field[3] END)
,max(CASE WHEN field[2] = '3月度' THEN field[3] END)
FROM in[1]
GROUP BY field[1]

PARTITION句が使っていないからか、うまく出来ました。
とりあえず、横キーを追加することが大事なようです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?