1

テーブルを作成しました

create table routes (
   type    character varying
 , quality character varying
 , route   integer
 , fare    integer
);

insert into routes (type, quality, route, fare)
values
  ('X', 'GOOD',    1, 5)
 ,('Y', 'GOOD',    1, 7)
 ,('X', 'AVERAGE', 2, 10)
 ,('Y', 'GOOD',    2, 7)
 ,('X', 'BAD',     3, 8)
 ,('Y', 'BAD',     3, 15);

ルート番号ごとに 2 つのレコードがあり、 と にroute,fare基づいてルートごとに 1 つの行 ( )を選択する必要がtypeありますquality
たとえば、type'X'andqualityが 'GOOD'またはの場合、その行のand'AVERAGE'を選択して次の 'route' に移動します。それ以外の場合は、タイプ「Y」の行から「ルート」と「運賃」を選択します。つまり、上記の表から、次のようになります。routefare

1,5
2,10
3,15

各ルートのレコードをループして、同じルートの 2 つのレコードから出力を導き出すことができませんでした。

4

2 に答える 2

0

このクエリを試してください (JOIN と CASE 式を使用):

SELECT  x.route,
        CASE WHEN x.quality IN ('GOOD', 'AVERAGE' )
             THEN x.fare  ELSE y.fare
        END fare
FROM routes x
JOIN routes y
ON x.type = 'X' AND y.type = 'Y' AND x.route = y.route 

デモ --> http://www.sqlfiddle.com/#!2/e58441/2

于 2013-10-20T10:53:21.737 に答える