我想将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
我该怎么做?
答案 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
。