[pgsql-jp: 28753] Re: SQL文での条件判定について

Yu Ooasa you @ dearest.net
2003年 1月 24日 (金) 17:40:55 JST


Fri, 24 Jan 2003 16:34:45 +0900
	"Iso, Toshitaka" <Toshitaka.Iso @ hp.com> said:
>カラム1(PK)	カラム2		カラム3		
>1       		10000000	0100
>2       		10000000	0200
>3       		10000000	0300
>4       		10000000	0400
>5       		10000000	0500
>6       		10000000	0600
>7       		10000000	0700
>8       		10000000	0800
>9       		10000000	0900
>10      		10000000	1000
>11      		11000000	0200
>12      		11000000	0300
>13      		11000000	0600
>14      		12000000	0300
>
>
>カラム3の値に優先順位が以下の順で決められていています。
>0400>0500>0600>0700>0100>0200
>
>ここでカラム2の値単位で優先順位の高いものだけを表示したいの
>ですがどのような方法があるのかを調べています。

そもそもこの「0400>0500>0600>0700>0100>0200」はどこで
定めているんでしょうか

それもテーブルにしてしまえば簡単なのでは

select * from test0124;
 id | val  | pri 
----+------+-----
  1 | 1000 | 400
  2 | 1000 | 500
  3 | 1000 | 100
  4 | 1100 | 600
  5 | 1100 | 700
  6 | 1200 | 300
(6 rows)

select * from pri_master;
 pri | pri_sort 
-----+----------
 400 |        1
 500 |        2
 600 |        3
 700 |        4
 100 |        5
 200 |        6
(6 rows)

select id,val,pri
  from (select * from test0124
           inner join pri_master using(pri)) as a,
       (select val as v,min(pri_sort) from test0124
           inner join pri_master using(pri) group by v) as b
 where val=v and pri_sort=min;
 id | val  | pri 
----+------+-----
  1 | 1000 | 400
  4 | 1100 | 600
(2 rows)

とかで目的に合いませんか?
実はもっと複雑な条件があるのかもしれませんけど。

>Case When文で出来るかと思っているのですが、「見つかったら終わり」
>という処理が出来ずに困っています。

たぶんできなくはないけど、SQLでそういう泥縄的なことはやるのは
美しくない、というのが正解な気がします

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



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