2010-10-14 8 views
14

¿Cómo incorporo una declaración if anidada en una cláusula de selección de una consulta SQL? Sé usar mayúsculas y minúsculas cuando la condición es X else y fin, pero ¿cómo se hace una anidada de la misma manera para cada registro en un conjunto de registros.tsql: ¿es posible hacer declaraciones de casos anidados en una selección?

if x.boy is not null then 
    x.boy 
else if x.girl is not null 
    then x.girl 
else if x.dog is not null 
    then x.dog 
else 
    x.cat 

aquí es mi intento:

SELECT top 10 
     id, 
     case when x.boy <> NULL then 
      x.boy 
     else case when x.girl <> NULL 
      x.girl 
       else case when x.dog <> NULL 
      x.dog 
       else x.cat 

     end as Who 
from house x 

es esto correcto?

Respuesta

16

Se podría simplificar esto con COALESCE.

SELECT TOP 10 id, COALESCE(x.boy, x.girl, x.dog, x.cat) as Who 
    FROM house x 
16

Sí. No hay nada de malo en un caso dentro de un caso.

Aunque, aquí es su guión, escrito corectly:

SELECT top 10 
    id, 
    case 
     when x.boy IS NOT NULL then x.boy 
     else case 
      when x.girl IS NOT NULL THEN x.girl 
      else case 
       when x.dog IS NOT NULL THEN x.dog 
       else x.cat 
      end 
     end 
    end as Who 
from house x 

O

SELECT top 10 
    id, 
    case 
     when x.boy IS NOT NULL then x.boy 
     when x.girl IS NOT NULL THEN x.girl 
     when x.dog IS NOT NULL THEN x.dog 
     else x.cat 
    end as Who 
from house x 

O

SELECT top 10 
    id, 
    coalesce(x.boy, x.girl, x.dog, x.cat) AS Who 
from house x 
+0

me sale un error con el 'como' al final como Who .. any ideas why? – phill

+0

error es la sintaxis incorrecta cerca de la palabra clave 'como'. – phill

+0

Mi respuesta tiene algunas formas diferentes de escribir su declaración que son correctas. Véalos y agregue sus comentarios –

0

Trate de hacer esto:

SELECT top 10 
     id, 
     case when x.boy Is Not NULL then x.boy 
     else 
       case when x.girl Is Not NULL then x.girl 
       else 
        case when x.dog Is Not Null Then x.dog 
        else x.cat End 
       End 

     end as Who 
from house x 

a pesar de que sólo podría utilizar coalesce como se sugiere Joe.

Cuestiones relacionadas