[pgsql-jp: 32848] Re: SELECT文 ORプロシージャ、どちらが良いでしょうか。

Yoshihisa Inoue bok @ bbsbrain.ne.jp
2004年 4月 21日 (水) 17:41:51 JST


ども井上と申します。

Hiroki Ohtsuka <h_ohtsuka @ mmplus.co.jp> wrote:

> 2つのテーブルから、ある条件でのSELECTに悩んでおります。
> SQL文のみでSELECTできるのであれば、SQL文のみでSELECTしたいです。
> 2.出力したい形は以下のようになっています。
> 出力テーブル					
> コード	分類コード	ID4	ID3	ID2	ID0
> ---------------------------------------------------
> 10	18	4000	3000	2000	1000
> 10	19	4000	3000	2000	1000
> 10	20	4000	3000	2000	1000
> ■条件
> 定義テーブルに登録されている分類コードを基準として、
> 登録テーブルの登録ID別に一覧を作成する。

ってことはクロス集計ですよね。PostgreSQLでは、クロス集計の機能がないので、
下記みたいなかんじで毎回SQLつくらないと集計できないと思います。

select 
	t.code,
	t.bunrui,
	sum(ID0.sum) as ID0,
	sum(ID1.sum) as ID1,
	sum(ID10.sum) as ID10,
	sum(ID20.sum) as ID20
from
	teigi as t
	left join 
		(select 
			code,
			bunrui,
			sum(kingaku) as sum 
		from 
			touroku
		where 
			id = 0 
		group by 
			code,
			bunrui
	) as ID0 on ID0.code = t.code and   ID0.bunrui = t.bunrui
	left join 
		(select 
			code,
			bunrui,
			sum(kingaku) as sum 
		from 
			touroku
		where 
			id = 1 
		group by 
			code,
			bunrui
	) as ID1 on ID1.code = t.code and   ID1.bunrui = t.bunrui
	left join 
		(select 
			code,
			bunrui,
			sum(kingaku) as sum 
		from 
			touroku
		where 
			id = 10 
		group by 
			code,
			bunrui
	) as ID10 on ID10.code = t.code and   ID10.bunrui = t.bunrui
	left join 
		(select 
			code,
			bunrui,
			sum(kingaku) as sum 
		from 
			touroku
		where 
			id = 20 
		group by 
			code,
			bunrui
	) as ID20 on ID20.code = t.code and   ID20.bunrui = t.bunrui

group by t.code,t.bunrui;

他にやり方あったら私も知りたいです。

By Yoshihisa Inoue



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