如何合并2个具有不同值的重复表?

时间:2016-11-04 18:32:24

标签: sql database oracle

我想将2个表合并为一个表(表或视图)。两者都有精确的列,但有不同的值,如:

表1:

id    Doc1             Doc2
---------------------------------
1     12/06/2016       NULL
2     20/08/2016       15/03/2016
3     NULL             NULL

表2:

id    name    desc
-----------------------
1     NULL      1
2     NULL      NULL
3     1         0

我想要使用的逻辑是:

如果表1中的值是日期(不是NULL),那么'是'

如果表1中的值为NULL,请检查表2

如果表2中的值为1则为“NA”

如果表2中的值为0或NULL,则为“否”

所以结果表将是这样的:

表格结果:

id    Doc1    Doc2
-----------------------
1     YES      NA
2     YES      YES
3     NA       NO

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这样的事情:

select t1.id as id,
       case when t1.doc1 is not null then 'YES'
            when t2.name != 0        then 'NA'
                                     else 'NO' end as doc1,
       case when t1.doc2 is not null then 'YES'
            when t2.desc != 0        then 'NA'
                                     else 'NO' end as doc2
from table_1 t1 full outer join table_2 t2 on t1.id = t2.id
;

这利用了"短路评估" case表达式 - 计算为TRUE的第一个when设置表达式的值,并跳过剩余的分支(如果有)。顺便提一下,!=0隐含not null