sql - 根据列值有条件选择行

标签 sql oracle plsql oracle10g

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;

对每个范围使用此方法,我填充一个临时表并在最后返回结果,但这不太灵活,是否有其他方法可以实现这一点?

谢谢

最佳答案

尝试这样...

Select * from tablename where flag=1 
union 
(Select * from tablename a where  (Select count(*) from tablename b 
where a.Range_id=b.RANGE_ID  and b.flag=1)<1)

SQL FIDDLE Demo

关于sql - 根据列值有条件选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17342005/

相关文章:

java - 手动更新数据库后清除 Hibernate 二级缓存

oracle - 什么情况导致Oracle软件包无效?

sql - 比较两个分隔字符串并在 PL SQL 中返回相应的值

sql - 如何在 SQL Server 中根据年份对记录进行分组

javascript - 如何使用 Nodejs 将 SQLite 索引放入变量中?

mysql - 将 NOT IN 转换为 NOT EXISTS

oracle - PL/SQL : Selecting from a table into an assoc array

mysql - 可以使用 SQL 查询获取 "friendly"URL 吗?

sql - 有没有办法在 SQL 中将每个值作为一行返回

database - 用于循环和记录的 PL/SQL 游标不起作用