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