Quando você usa um
case
, você deve retornar apenas um único registro - não mais que 1. Para obter o resultado desejado, eu usaria uma junção externa esquerda (supondo que você tenha uma maneira de unir tabela1 a tabela2), mas adicione sua verificação em tabela1.c1 no condição de junção para que os valores da tabela2 só estejam presentes se c1 <> '1' select
coalesce(table2.c1, table1.c1) c1,
coalesce(table2.c2, table1.c2) c2,
coalesce(table2.c3, table1.c3) c3
from table1
left outer join table2
on (your keys here)
and table1.c1 <> '1' -- This gets table1 if c1 = '1';
Esta solução assume que a tabela1 e a tabela2 estão relacionadas. Se você não pode relacioná-los, então parece que você pode usar uma união all na qual você pega todos os valores da tabela1 onde c1 ='1' e os une a todas as linhas da tabela2. Se necessário, você só pode incluir valores table2 se c1 <> '1'.
select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary
ATUALIZAÇÃO
Com base nos dados de amostra e na saída esperada, use a segunda consulta acima:
select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2 where c1 <> '1'
SQL Fiddle:http://www.sqlfiddle.com/#!4/ 710f0/1/0