sql >> Base de Datos >  >> RDS >> Oracle

ORA-00913:demasiados valores al usar el caso cuando

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