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

Yu Ooasa you @ dearest.net
2003年 1月 29日 (水) 15:46:26 JST


Wed, 29 Jan 2003 14:50:00 +0900
	"Chie.M" <gontakun @ fish.co.jp> said:
>担当者ID、年月、商品A個数、商品A金額、商品B個数、商品B金額、・・・
>と言うようなテーブルを、担当者ごとに年月を横展開した表にしたいです。
>Excelでありがちな表です。

これってつまるところいわゆるクロス集計とは違いますか?

>表のイメージは
>担当者、200207-A数、200207-A額 、200208-A数、200208-A額 、・・・
>と言う感じで、月ごとに、個数と金額を並列させて、担当者が月に
>何個でいくらの売上げがあったかを表示させる物です。
(snip
>毎月データは増えますので、月データの追加があったら、
>月に一度だけビューを書き換えるというような処理しか思いつきませんでした。
>このSQLでは年数が経てば経つほど膨らんでいってしまうので
>あまり気持ちが良くないです。

時系で増え続ける系統を列にするのは無駄というかあまり賢く
ないような気がします。見栄えだけの問題ですよねえ?

たとえば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,
:
sum(case month when 12 then i else 0 end) as m12,
from sales group by eid,year;

 eid | year | m1 | m2 | m3 |...| m12
-----+------+----+----+----+...+----
   1 | 2003 |  2 |  3 |  1 |...|   1
   2 | 2003 |  1 |  2 |  3 |...|   3

とか。あとは、担当者と年(度)の条件設定によってwhere句を加えて
結果を絞って見せてやったり。

>・画面に「<<」「<」「 >」「>>」のような矢印ボタンをつけて、
> 一月つづずらしたり、半年毎にずらして表示ができるように

こういう要求に応えるには不足ですけど。というかこういったユーザ
の注文にはまずできるかできないか、できないとしてもどこまでなら
できるのか、といった折衝が必要と思います。

>クライアント
> Windows XP/Access 2002
> PostgreSQL ODBC Driver 07.01.0006 日本語版

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

--
Yu Ooasa  E-mail: you @ dearest.net



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