質問: 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件のみを抽出できますか。
回答: こんな方法もあります。 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