表格结构:
tb_participante_respuesta
ID | n_varcod | n_parcod | c_resval
1 | 48 | 1 | 'PRT'
2 | 48 | 2 | 'ZDE'
tb_encuesta_valor
ID | n_varcod | c_valnom | n_valord
1 | 48 | 'ART' | 1
2 | 48 | 'PRT' | 2
3 | 48 | 'ZDE' | 3
我执行此查询:
select a.n_parcod,b.c_valnom ,a.c_resval
from tb_participante_respuesta a
full outer join tb_encuesta_valor b on b.n_varcod=a.n_varcod
and b.c_valnom=a.c_resval
where b.n_varcod=48
order by b.n_valord;
输出:
n_parcod | c_valnom | c_resval
Null | 'ART' | Null
1 | 'PRT' | 'PRT'
Null | 'ZDE' | Null
我想要这样的事情:
n_parcod | c_valnom | c_resval
1 | 'ART' | Null
1 | 'PRT' | 'PRT'
1 | 'ZDE' | Null
2 | 'ART' | Null
2 | 'PRT' | Null
2 | 'ZDE' | 'ZDE'
答案 0 :(得分:1)
cross join
会做一个笛卡尔积。然后,您需要单独检查匹配条件。
select
p.n_parcod,
e.c_valnom,
case when
p.c_resval = e.c_valnom and
e.n_varcod = p.n_varcod
then p.c_resval
end as c_resval
from
tb_encuesta_valor e
cross join
tb_participante_respuesta p
where
e.n_varcod = 48
order by
p.n_parcod,
e.n_valord;