電子書籍の厳選無料作品が豊富!

以下のSQLの作成で悩んでいます。

【内容】
抽出元テーブルの中で、あるコードが同じデータは、
ある項目を全て同じ値にして取得したい。

(例)
■抽出元テーブル

コード SEQ FLG
 1    1   1
 1    2  
 1    3  
 2    1   0
 2    2
 2    3
 3    1   1

コードは同じ物が1つ又は複数あります。
コードが同じ物にはSEQで番号が連番されます。
FLGの項目がありますが、SEQ=1のデータしか設定されていません。


■求めたい結果

コード SEQ FLG
 1    1   1
 1    2   1  
 1    3   1
 2    1   0
 2    2   0
 2    3   0
 3    1   1

全てのデータでFLGを求めて取得します。
取得の仕方はコードが同じでSEQ=1の値を取ります。
抽出元テーブルと結果のデータ件数は同じになります。
抽出元テーブルと結果の違いは、FLGに値が埋まっているかどうかの違いのみです。

このテーブルのFLGはUPDATEする事は出来ません。
別表なども利用しないで、
selectのSQL文だけで対応したいです。

どのような方法で対応できるでしょうか?
オラクルのバージョンは10gです。

よろしくお願い致します。

A 回答 (3件)

select コード,SEQ,


( select flg from tbl t2 where t1.コード=t2.コード and t2.SEQ=1 ) FLG
from tbl t1

の要領でいけると思います。
(コード,SEQ,)で一意になるのなら主キー設定したほうがいいでしょう。
    • good
    • 0
この回答へのお礼

お返事が遅くなりました。ご回答ありがとうございました。
この方法で問題なく動作確認できました。

お礼日時:2011/08/22 14:09

こんなんでいいんじゃないかな。

既に出ている回答の方が高度なのかもしれないけど。

select 抽出テーブル.コード as コード、抽出テーブル.seq as seq,抽出テーブル2.フラグ as フラグ  

from 抽出テーブル,
(select コード,フラグ from 抽出テーブル where seq = 1) 抽出テーブル2

where 抽出テーブル1.コード(+)=抽出テーブル2.コード
order by 抽出テーブル.コード,抽出テーブル.seq;
    • good
    • 0
この回答へのお礼

お返事が遅くなりました。ご回答ありがとうございました。

お礼日時:2011/08/22 14:10

first_valueファンクションを使って、



select
コード
,SEQ
,first_value(FLG) over(partition by コード order by seq) FLG
from 抽出元テーブル;

とかでもいいと思います。
    • good
    • 0
この回答へのお礼

お返事が遅くなりました。ご回答ありがとうございました。

お礼日時:2011/08/22 14:09

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