Cuando usas un case
, debe devolver solo un único registro, no más de 1. Para lograr el resultado deseado, usaría una combinación externa izquierda (suponiendo que tiene una forma de unir table1 a table2), pero agregue su verificación en table1.c1 en el condición de unión para que los valores de table2 solo estén presentes si 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 solución asume que la tabla 1 y la tabla 2 se relacionan. Si no puede relacionarlos, entonces parece que puede usar una unión de todos en la que toma todos los valores de table1 donde c1 ='1' y los une a todas las filas de table2. Si es necesario, solo puede incluir valores de tabla2 si c1 <> '1'.
select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary
ACTUALIZAR
Según sus datos de muestra y el resultado esperado, utilice la segunda consulta anterior:
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