- ベストアンサー
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件のみを抽出できますか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんなかんじでどうでしょう? 未検証なので、多少の修正は必要だと思います。 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.県コード);
その他の回答 (3)
- kazu1213
- ベストアンサー率60% (3/5)
こんな方法もあります。 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
お礼
早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
分析関数を使うと、こんな感じ。 select 県コード,コード,商品名,単価 from (select x.*,row_number() over(partition by 県コード order by DECODE(コード,2000,1,3000,2,1000,3)) R from TARGET) where R=1
お礼
早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。
- xKENx
- ベストアンサー率65% (21/32)
こんな感じでどうでしょうか。 前提として県コードとコードで一意である必要があります。 WITH TMP AS ( SELECT 県コード,コード,商品名,単価 DECODE(コード,2000,1,3000,2,1000,3) AS コード順序 FROM テーブル ) SELECT * FROM TMP WHERE ( 県コード , コード順序) IN ( SELECT 県コード , MIN(コード順序) FROM TMP GROUP BY 県コード )
お礼
早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。
お礼
早速の回答ありがとうございます。皆さんの回答のおかげで無事抽出する事ができました。本当にありがとうございました。