Tutorial de SQL

Cómo usar CASE WHEN en SQL

CASE crea una columna cuyo valor depende de condiciones, como la función SI de Excel: por ejemplo, «Excelente», «Aprobado» o «En riesgo» según el promedio. Las condiciones se revisan en orden y gana la primera que se cumple. Aquí verás la sintaxis con WHEN, THEN, ELSE y END, un ejemplo resuelto y la alternativa IIF de SQL Server.

CASE: una columna según condiciones

CASE crea una columna cuyo valor depende de condiciones, como la función SI (o SI.CONJUNTO) de Excel.

Se escribe CASE, luego uno o varios WHEN condición THEN resultado, un ELSE opcional para todo lo demás, y se cierra con END. Las condiciones se revisan en orden y gana la primera que se cumple.

Cómo se escribe

CASE WHEN condición1 THEN 'A' WHEN condición2 THEN 'B' ELSE 'C' END

CASE … END
abre y cierra la clasificación
WHEN … THEN …
si se cumple la condición, devuelve ese valor
ELSE
lo que se devuelve si no se cumplió ninguna

Ejemplo resuelto

SELECT nombre, promedio, CASE WHEN promedio >= 9 THEN 'Excelente' WHEN promedio >= 7 THEN 'Aprobado' ELSE 'En riesgo' END FROM alumnos
Número de fila#nombrepromedioCASE WHEN promedio >= 9 THEN 'Excelente' WHEN promedio >= 7 THEN 'Aprobado' ELSE 'En riesgo' END
1Valeria Núñez9.4Excelente
2Emiliano Rojas7.8Aprobado
3Camila Ortega8.6Aprobado
4Santiago Flores6.9En riesgo
5Regina Salinas9.8Excelente
6Diego Cárdenas7.2Aprobado
7Ximena Paz8.1Aprobado
8Sebastián Lara9.1Excelente
9Renata Campos5.9En riesgo
10Mateo Guzmán8.9Aprobado

Cada alumno con su nivel según su promedio.

En SQL Server: En SQL Server CASE se escribe igual. También existe IIF(condición, sí, no) para casos de solo dos opciones.

  • No olvides el END: sin él la consulta marca error.
  • Si no pones ELSE y ninguna condición se cumple, el resultado es NULL (vacío).
  • Puedes ponerle nombre a la columna: CASE … END AS nivel.

Preguntas frecuentes

¿Qué pasa si ninguna condición de CASE se cumple?

Se devuelve lo que pusiste en ELSE. Si no hay ELSE, el resultado es NULL (vacío).

¿En qué orden revisa CASE las condiciones?

De arriba hacia abajo: gana la primera que se cumple y las demás ya no se revisan.

¿Cómo le pongo nombre a la columna de CASE?

Agrega AS al final: CASE … END AS nivel. Y no olvides el END, sin él la consulta marca error.