[pgsql-jp: 28833] Re: 表を作成するのに最適な構造とSQLについて

Chie.M gontakun @ fish.co.jp
2003年 1月 29日 (水) 16:28:49 JST


Chieです。
Yu Ooasaさん、ご回答ありがとうございます。

> >担当者ID、年月、商品A個数、商品A金額、商品B個数、商品B金額、・・・
> >と言うようなテーブルを、担当者ごとに年月を横展開した表にしたいです。
> >Excelでありがちな表です。
> 
> これってつまるところいわゆるクロス集計とは違いますか?

そうです!そんな感じです。
実際に、Accessで参照させていた時は、クロス集計も組み合わせて
使っている場合がありました。

ただ、Accessで言うところのクロス集計クエリだと集計値が
1つしか指定できないので、そのまま全く同じと言うわけではないです。

実際には、個数、金額の合計だけでなく、平均やその他の付随する値も
同時に表示させるので、クロス集計で不足の部分は普通の集計クエリも
使用していました。

> >このSQLでは年数が経てば経つほど膨らんでいってしまうので
> >あまり気持ちが良くないです。
> 
> 時系で増え続ける系統を列にするのは無駄というかあまり賢く
> ないような気がします。見栄えだけの問題ですよねえ?

そうなんです。非常に使いにくいのです。

> クライアントに Access があるなら、バックエンドからは単純にデータ
> だけ引っ張って来て、フロントエンドでクロス集計クエリーつくって
> 表示させるのが手っ取り早いと思いますがどうでしょう。
> webのみのUIと違って融通効きませんか

今やってるのは、参照用画面をAccessからWebへ
移行する作業なのです・・・(;_;)

> たとえば1レコードは1年分と決めてしまえばもっと単純になるのでは
> select eid,year,
> sum(case month when 1 then i else 0 end) as m1,
> sum(case month when 2 then i else 0 end) as m2,
> sum(case month when 3 then i else 0 end) as m3,
・・・
> とか。あとは、担当者と年(度)の条件設定によってwhere句を加えて
> 結果を絞って見せてやったり。

なるほど!年でもグループ化すればかなり絞れますね。
汎用化もしやすいです!カラム名も12ヶ月分作ればいいし。

こんな考え方もあるかと、目から鱗です。
どうもありがとうございます!!

> >・画面に「<<」「<」「 >」「>>」のような矢印ボタンをつけて、
> > 一月つづずらしたり、半年毎にずらして表示ができるように
> 
> こういう要求に応えるには不足ですけど。というかこういったユーザ
> の注文にはまずできるかできないか、できないとしてもどこまでなら
> できるのか、といった折衝が必要と思います。

う、それが、今まで似た様な事が出来てしまっていたので・・・
今回データの形式が微妙に違うのですが、まぁ画面周りは、
データさえちゃんとできれば、GUIは何とかなるかと(^_^;)

それに、教えていただいた方法でかなり近い所まで
表現できそうです。

どうもありがとうございました!

----------------------------
Chie.M <gontakun @ fish.co.jp>
※メールアドレス変わりました。




pgsql-jp メーリングリストの案内