行は増えていくが、それだけが常識ではない

午前中は黙々とコーディングしてたが、
午後はエクセルにハマった。
だから今日はこんなに帰りが遅いんだが…


グレープシティのグリッドからエクセル出力で時間表示がうまくいかなくて困った。
どんなのかというと、
一行のとあるレコードに時間A…時間Xがあって、
先頭に合計を表示するというもの。


余談だが、
SQL初心者の私にとって、
今回組み込んだファンクションは凄いと思った。*1
何が凄いかって、
まず行によってカラムのデータ型が違うということ。


普通*2はクリエイトテーブルで宣言する通り、
縦(列)は同一のデータ型だが、
そのファンクションの戻りテーブルをデバッグで見ると同じ列上に数字やら文字やら時刻型が混在していた!!


SQLではバリデイトという型*3があるらしく*4、いわゆるObject型として内包できる。
ヘルブを見ると、
.net側ではObject型で扱われるらしい。


開発者に聞くと*5
まあ、これはヘルプ見ればわかるが、
テーブルが縦でなく横にのびていくのが恐ろしく驚いた!!!!


要はデータが増えると、
行でなく列が増えていく…。


目から鱗です…。
ピポットという機能とUnionを併用するとテーブルの行列関係をひっくり返す事が可能らしい*6


さてさて本題ですが*7
クエリで引っ張ってきたテーブルをグリッドと接続して、
エクセル出力用メソッドを使うとめでたく簡単に出力できる。
この時グリッド上でフォーマット指定をすると、
それも引き継がれる。
*8
、が!!
エクセルがくせ者で設定したフォーマットをカスタム設定として認識してしまう。
だから例えば文字型の数字*9はファイルを開いた時は文字でもセルをダブルクリックすると数字扱いになってしまう。


打ち疲れた(´△`)アァ-

*1:だから今忘れないように電車の中でせっせと打ってるんだけども

*2:というかそー思ってた

*3:SQLバリデイト

*4:そーいえばVB6にもあったなあ

*5:といっても強制だが、機能説明したくなる気持ちはわからなくもない

*6:素人による説明抜粋…

*7:余談が長くて終点に着いてしまった

*8:更に余談だが、セットするテーブルの列が同一データ型ではないとなると、アプリ側でセル単位にフォーマット指定しないといけなくて面倒…

*9:例えばコード類などゼロ埋めするようなデータ