根据Oracle pl / sql中的条件解码值

时间:2013-11-21 13:49:47

标签: sql oracle

我有两张表 test1 test2

test1中,有一些名为rec_iddeptno的列。 deptno的值为10,20,30,40....

test2表中,列rec_iddeptno也可用。

我需要deptno 30的条件输出,具体取决于test2表中此值的可用性。

rec_id  deptno  decoded value   condition
1           10              a          NA
2           20              b          NA
3           30   c or discard

如果rec_id = 3deptno = 30test2表中可用,则丢弃,否则C

4           40              d          NA
5           50              f          NA

我不想为此问题创建任何函数,因为它在sql和pl / sql引擎之间进行上下文切换并影响性能。

请使用简单的sql.many感谢让我知道更好的方法!

我使用过像这样的解码:

select decode(test1.deptno,
              10, 'a',
              20, 'b',
              30, 'required ur help',
              40, 'd',
              50, 'e') from test1;

1 个答案:

答案 0 :(得分:1)

如果您想要返回不同的值,那么您就是这样做的。

select decode(test1.deptno,
              10, 'a',
              20, 'b',
              30, decode((select count(*)
                          from test2 b
                          where b.rec_id=3
                            and b.deptno = 30)
                         ,0,'c'
                         ,'discard')
              40, 'd',
              50,'e') from test1 a;

如果通过“丢弃”表示“不返回此行”,那么您只需使用NOT EXISTS

select decode(test1.deptno,
              10, 'a',
              20, 'b',
              30, 'c',
              40, 'd',
              50,'e') from test1 a
where not exists (select 1
                  from test2 b
                  where b.rec_id = 3
                    and b.deptno = 30
                    and b.rec_id = a.rec_id
                    and b.deptno = a.deptno);