[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 メーリングリストの案内