Excel出力について

ASTERIA Warpでこんなことできる?…と思うことなど、ご遠慮なく...(^_-)

Excel出力について

投稿記事by masa102 » 2012年9月06日(木) 14:55

RDBより下記のようなレコードを取得して、Excelに出力したいのですが、できるのでしょうか?

商品名      日付           数量
A       2012/01/03         20
A       2012/01/06         30
A       2012/01/10         40
B       2012/01/04         60

商品 2012/01/03 2012/01/04 2012/01/06 2012/01/10
A 20 0 30 40
B 0 60 0 0
masa102
 
記事: 14
登録日時: 2012年8月17日(金) 08:53

Re: Excel出力について

投稿記事by itete » 2012年9月06日(木) 18:30

RecordSQLとVelocityの組み合わせで、ストリームの加工をやってみました。
商品名の種類がAとBのみ、かつ商品名と日付でレコードがユニークになる場合です。

レコードをRecordSQLで加工。
----------
select field[2],
coalesce((select field[3] from in[1] t2 where field[1] = 'A' and t2.field[2] = t1.field[2]),0),
coalesce((select field[3] from in[1] t2 where field[1] = 'B' and t2.field[2] = t1.field[2]),0)
from in[1] t1 order by field[2] asc
----------

結果
"2012/01/03","20","0"
"2012/01/04","0","60"
"2012/01/06","30","0"
"2012/01/10","40","0"

これをVelocityで行列入れ替え。
----------
#set ($quot = '"')
#set ($r1 = '"商品"')
#set ($r2 = '"A"')
#set ($r3 = '"B"')
#foreach ($r in $in.records)
#set ($r1 = "$r1,$quot$r.field(0)$quot")
#set ($r2 = "$r2,$quot$r.field(1)$quot")
#set ($r3 = "$r3,$quot$r.field(2)$quot")
#end
$r1
$r2
$r3
----------

結果
"商品","2012/01/03","2012/01/04","2012/01/06","2012/01/10"
"A","20","0","30","40"
"B","0","60","0","0"

ただ、この出力形式はフィールド数が可変になりそうなので、あらかじめ Velocity以降のフィールド数を
多めに設定しておかないと、後ろのフィールドが出力されない可能性がありますね。
itete
 
記事: 157
登録日時: 2007年1月09日(火) 12:15


Return to ビギナールーム

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]