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 的行,如果有相同的行但没有其中包含一个 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
我试着分块做:即为每个范围运行类似的东西:
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 使用这种方法我填充一个临时表并在最后返回结果,但这不是很灵活,还有其他方法可以实现吗?
谢谢