SQL
ASTERIA

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

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

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