海外旅行から帰ってきたら、まず何を食べる?

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件のみを抽出できますか。

A 回答 (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.県コード);
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/20 00:50

こんな方法もあります。



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/20 00:51

分析関数を使うと、こんな感じ。



select 県コード,コード,商品名,単価
from
(select x.*,row_number() over(partition by 県コード order by DECODE(コード,2000,1,3000,2,1000,3)) R from TARGET)
where R=1
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/20 00:51

こんな感じでどうでしょうか。


前提として県コードとコードで一意である必要があります。

WITH TMP AS (
SELECT
県コード,コード,商品名,単価
DECODE(コード,2000,1,3000,2,1000,3) AS コード順序
FROM テーブル
)
SELECT * FROM TMP
WHERE ( 県コード , コード順序) IN (
SELECT 県コード , MIN(コード順序) FROM TMP
GROUP BY 県コード
)
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/20 00:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す