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