• ベストアンサー

SQLの抽出条件の記述の仕方について

sqlのselect ~where等で以下のデータが抽出できますでしょうか。 テーブルに以下のデータが格納されています。 県コード  コード 商品名        単価 ------------------------------------------------------------ 01      1000 カメラ(中国製)   10,000円 01     2000 カメラ(日本製)   30,000円   01      3000 カメラ(アメリカ製) 40,000円 ------------------------------------------------------------ 02      1000 カメラ(中国製)   10,000円 02      3000 カメラ(アメリカ製) 40,000円 ------------------------------------------------------------ 上記のようなデータのなから、一つの県から、1つの商品(コード:2000(カメラ(日本製))、3000(カメラ(アメリカ製))、1000(カメラ(中国製))の優先順位で1つを選択)をselect文で抽出可能でしょうか。上記のデータならば、以下のデータを抽出したいのですが。 01     2000 カメラ(日本製)   30,000円 02      3000 カメラ(アメリカ製) 40,000円 2件のみを抽出できますか。

質問者が選んだベストアンサー

  • ベストアンサー
  • hiro_sun
  • ベストアンサー率27% (14/51)
回答No.1

こんなかんじでどうでしょう? 未検証なので、多少の修正は必要だと思います。 DECODEを使用することで、コードを優先順位(1~3)に置き換えて、 その値が県コードごとの最小値であることをサブクエリを使用し、 条件にしています。 +--------------------------------------------+ SELECT T1.県コード,T1.コード,T1.商品名,T1.単価 FROM テーブル名 T1 WHERE DECODE(T1.コード,2000,1,3000,2,1000,3) = (SELECT MIN(DECODE(T2.コード,2000,1,3000,2,1000,3)) FROM テーブル名 T2 WHERE T1.県コード = T2.県コード);

mpochid
質問者

お礼

早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。

その他の回答 (3)

  • kazu1213
  • ベストアンサー率60% (3/5)
回答No.4

こんな方法もあります。 select 県コード,    substrb(max(decode(コード,2000,2,3000,1,0)           || コード || ' ' || 商品名 || ' ' || 単価),2,        lengthb(max(decode(コード,2000,2,3000,1,0)               || コード || 商品名 || 単価)) + 1)                        "コード 商品名 単価" from tbl group by 県コード; 先頭のdecode文(1桁)を非表示にするためsubstrbを使用しています。 lengthbの+1は表示データから半角スペース2つの連結を取り除いたものを 対象にしているため、decode桁数の差分(-1)に2が加えられ+1となります。 <実行例> 県 -- コード 商品名 単価 -------------------------------------------------------------------------------- 01 2000 カメラ(日本製) 30000 02 3000 カメラ(アメリカ製) 40000

mpochid
質問者

お礼

早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。

回答No.3

分析関数を使うと、こんな感じ。 select 県コード,コード,商品名,単価 from (select x.*,row_number() over(partition by 県コード order by DECODE(コード,2000,1,3000,2,1000,3)) R from TARGET) where R=1

mpochid
質問者

お礼

早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。

  • xKENx
  • ベストアンサー率65% (21/32)
回答No.2

こんな感じでどうでしょうか。 前提として県コードとコードで一意である必要があります。 WITH TMP AS ( SELECT 県コード,コード,商品名,単価 DECODE(コード,2000,1,3000,2,1000,3) AS コード順序 FROM テーブル ) SELECT * FROM TMP WHERE ( 県コード , コード順序) IN ( SELECT 県コード , MIN(コード順序) FROM TMP GROUP BY 県コード )

mpochid
質問者

お礼

早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。

関連するQ&A