dポイントプレゼントキャンペーン実施中!

SQLの取得方法を考えてます。

テーブルA
キー番号 利用フラグ  内容
  1      1     りんご
  2      0     みかん
  3      0     なし
  4      1     すいか
  5      1     ぶどう

上記のような5件のデータがあるとします。
出力する時は、1件(縦もち=>横もち)にします。
キー番号が小さい順で、利用フラグが1の物を出力します。
利用フラグが1の物は最大でも3件しかありません。
その為、出力テーブルも3件分しかありません。
利用フラグが1の物が3件無い場合は、ある分だけ出力します。

上記データの時の出力結果想定
テーブルB
キー番号1 内容1  キー番号2 内容2  キー番号3  内容3
  1     りんご     4     すいか    5     ぶどう

これをどのようなSQLで実現できるでしょうか?
方法がよくわかりません。

A 回答 (3件)

select


max(case when rnum = 1 then キー番号 else null end) キー番号1
,max(case when rnum = 1 then 内容 else null end) 内容1
,max(case when rnum = 2 then キー番号 else null end) キー番号2
,max(case when rnum = 2 then 内容 else null end) 内容2
,max(case when rnum = 3 then キー番号 else null end) キー番号3
,max(case when rnum = 3 then 内容 else null end) 内容3
from (
select キー番号,内容, row_number() over(order by キー番号) rnum
from テーブルA
where 利用フラグ = 1);
みたいなことでしょうか?

質問の際にOracleのバージョンも書いたほうがいいですよ。
このSQLも古いバージョンでは動かないので。
    • good
    • 0
この回答へのお礼

上手く、動作確認する事ができました。
どうもありがとうございます。
バージョンの件は次回質問する事があった際はきをつけます。

お礼日時:2011/06/02 17:43

No.1です。



補足ですが、利用フラグ = 1 が0件の場合は、もちろん該当レコードがないので、
1件も抽出されません。
    • good
    • 0

SELECT * FROM テーブルA WHERE 利用フラグ = 1



このセレクト文で 利用フラグ = 1 のものを抽出できます。

最大で3件が該当とのことですので、1件の時でも2件の時でも結果は、利用フラグ = 1 のものだけ抽出されます。

この回答への補足

通常のSQLの形ですが、これだと縦もち=>横もち変換。キー番号の小さい順という辺りが上手くいきません。

補足日時:2011/06/02 17:42
    • good
    • 0

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

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