ID RANGE_ID START_DATE END_DATE BAND_TYPE FLAG_LINE
3 1 01/03/2013 31/03/2013 R 1
4 1 01/03/2013 31/03/2013 R 0
5 2 01/03/2013 31/03/2013 R 1
6 2 01/03/2013 31/03/2013 R 0
7 3 01/03/2013 31/03/2013 R 0
8 3 01/03/2013 31/03/2013 N 0
このテーブルから、RANGE_ID ごとに、次の条件を使用して行を選択する必要があります。(ID フィールドを除いて) 同一の列を持つ行がある場合は、FLAG_LINE = 1 の行のみを選択します。それらの 1 つに FLAG_LINE=1 列が含まれている場合は、それらすべてを選択します。これに基づいて、クエリは次の結果を返す必要があります。
ID RANGE_ID START_DATE END_DATE BAND_TYPE FLAG_LINE
3 1 01/03/2013 31/03/2013 R 1
5 2 01/03/2013 31/03/2013 R 1
7 3 01/03/2013 31/03/2013 R 0
8 3 01/03/2013 31/03/2013 N 0
私はチャンクでそれをやろうとしました:つまり、各RANGEに対して同様のものを実行します:
begin
for x in ( select count(*) cnt
from dual
where exists (
select 1 FROM myTable
WHERE RANGE_ID = 1 AND FLAG_LINE = 1) )
loop
if ( x.cnt = 1 )
then
dbms_output.put_line('flag line exists');
--insert the line with FLAG_LINE = 1 into temp table for this range
else
dbms_output.put_line('does not exist');
--insert the lines into temp table for this range
end if;
end loop;
end;
各 RANGE に対してこのメソッドを使用して、一時テーブルにデータを入力し、最後に結果を返しますが、これはあまり柔軟ではありません。これを達成できる別の方法はありますか?
ありがとう