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# | nombre | promedio | CASE WHEN promedio >= 9 THEN 'Excelente' WHEN promedio >= 7 THEN 'Aprobado' ELSE 'En riesgo' END |
|---|---|---|---|
| 1 | Valeria Núñez | 9.4 | Excelente |
| 2 | Emiliano Rojas | 7.8 | Aprobado |
| 3 | Camila Ortega | 8.6 | Aprobado |
| 4 | Santiago Flores | 6.9 | En riesgo |
| 5 | Regina Salinas | 9.8 | Excelente |
| 6 | Diego Cárdenas | 7.2 | Aprobado |
| 7 | Ximena Paz | 8.1 | Aprobado |
| 8 | Sebastián Lara | 9.1 | Excelente |
| 9 | Renata Campos | 5.9 | En riesgo |
| 10 | Mateo Guzmán | 8.9 | Aprobado |
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.