IFs anidados en la SELECT entre varias vistas

Tengo problemas para sacar en la SELECT en una columna el valor entre varios campos, cada uno de ellos procedente de una vista distinta que enlazo en el FROM, para sacar el dato del campo que no esté vacío, ya que será el mismo dato en todos los campos, si es que hay dato.
Ejemplo:
select clave,
if v1.campo1 <> '' then v1.campo1
else if v2.campo1 <> '' then v2.campo1
else if v3.campo1 <> '' then v3.campo1
else ''
end if
end if
end if
from vista1 v1 inner join vista2 v2 on v1.id = v2.id
inner join vista3 v3 on v1.id = v3.id;

1 Respuesta

Respuesta
1
Lo que planteas aunque no es un estándar se SQL responde a una estructura que está disponible en la mayoría de los sistema gestores de bases de datos.
No sé en qué SGBD trabajas pero por ejemplo en SQL server o mySQL dispones de una estructura...
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END
Searched CASE expression:CASE     WHEN Boolean_expression THEN result_expression [ ...n ]      [ ELSE else_result_expression ] END
En tu ejemplo podría quedar algo así...
select clave,
              CASE  WHEN v1.campo1 <> ''  THEN v1.campo1 
              ELSE CASE  WHEN v2.campo1 <> ''  THEN v2.campo1   
                   ELSE  CASE  WHEN v3.campo1 <> ''  THEN v3.campo1
                         END 
                   END 
       END
from vista1 v1 inner join vista2 v2 on v1.id = v2.id 
inner join vista3 v3 on v1.id = v3.id; 
Además a lo mejor te podría servir una estructura del tipo 
select clave, 
       v1.campo1 
  from vista1 v1 
 where v1.campo1 <> ''
union  
select clave, 
       v2.campo1 
  from vista1 v2 
 where v2.campo1 <> ''
union  
select clave, 
       v3. Campo1
  From vista3 v3
 where v3.campo1 <> ''
Si quieres capturar todos lo registros que no tengan un valor vacío creo que sería más rápida, aunque lo suyo sería porbarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas