El uso de condiciones directamente en la consulta nos facilita la portabilidad entre lenguajes de servidor, simplificar código y economizar recursos.

Habitualmente, nuestro flujo de trabajo consiste en utilizar SQL para extraer información de nuestra Base de Datos y posteriormente utilizar un lenguaje de servidor para validar o modificar dichos resultados. Sin embargo, SQL también nos permite realizar dichas comprobaciones y modificaciones directamente en la consulta.

El contenido de este artículo está enfocado a MySQL con PHP, pero la sintaxis de la consulta es prácticamente idéntica para otras DBMS (excepto Access).

SINTAXIS:
Si has utilizado condiciones del tipo if…then…else, switch…case en cualquier lenguaje, la sintaxis te será sencilla de entender. La estructura básica es:

	CASE
	WHEN ...
	WHEN ...
	ELSE ...
	END

No es necesario el uso de ningún tipo de instrucci?n BREAK, ya que automáticamente devuelve el primer resultado válido.

Existen 2 Tipos de sentencia CASE: Simple y con búsqueda (Searched CASE)
En el tipo simple, se compara una expresión o valor contra un conjunto de expresiones o valores para obtener el resultado:

CASE e_civil
WHEN 0 THEN 'soltero'
WHEN 1 THEN 'casado'
ELSE 'otro/desconocido'
END
AS estado_civil

En el tipo ‘Searched’, lo que se evalúan son condiciones:
Utilizando el ejemplo anterior, podríamos haber escrito

	CASE
	WHEN e_civil = 0 THEN 'soltero'
	WHEN e_civil = 1 THEN 'casado'
	ELSE 'otro/desconocido'
	END
	AS estado_civil

Para este artículo, hemos creado un historial de temperaturas que guarda los resultados de cada mes y año:

La consulta de inicio es sencilla: la función AVG nos permitirá calcular la media:

	SELECT mes, AVG(temp) AS 'TemperaturaMedia'
	FROM tbl_temperaturas
	GROUP BY mes
	ORDER BY mes ASC

El resultado:

Primer Objetivo: Aquellos registros cuya media del mes estén por debajo de 15 grados aparecerán en una celda de color azul; entre 16 y 25 la celda será de color verde y por encima de 25 será naranja.

Como primer paso, utilizaremos un CASE de tipo Searched para crear un campo nuevo, ‘temp_color’, que guardará el valor hexadecimal del color dependiendo del valor. Cuando la temperatura media sea menor de 16 será azul, entre 16 y 25 será verde y mayor de 25, rojo:

	SELECT mes,AVG(temp) AS 'TemperaturaMedia',
	CASE
	WHEN AVG(temp)
	WHEN AVG(temp) BETWEEN 16 AND 25 THEN '#00FF00'
	WHEN AVG(temp)>25 THEN '#FF0000'
	ELSE '#FFFFFF'
	END
	AS temp_color
	FROM tbl_temperaturas
	GROUP BY mes
	ORDER BY mes ASC

La consulta anterior nos devuelve esta tabla de resultados similar a ?sta:

Segundo Objetivo: Utilizaremos un CASE simple para que la consulta nos devuelva directamente el nombre del mes dependiendo del valor. Aprovecharemos para que la temperatura media redondee a un sólo decimal:

	SELECT ROUND( AVG(temp),1) AS 'TemperaturaMedia',
	CASE mes
	WHEN 1 THEN 'Enero'
	WHEN 2 THEN 'Febrero'
	WHEN 3 THEN 'Marzo'
	WHEN 4 THEN 'Abril'
	WHEN 5 THEN 'Mayo'
	WHEN 6 THEN 'Junio'
	WHEN 7 THEN 'Julio'
	WHEN 8 THEN 'Agosto'
	WHEN 9 THEN 'Septiembre'
	WHEN 10 THEN 'Octubre'
	WHEN 11 THEN 'Noviembre'
	WHEN 12 THEN 'Diciembre'
	END
	AS 'NombreMes',
	CASE
	WHEN AVG(temp)
	WHEN AVG(temp) BETWEEN 16 AND 25 THEN '#00FF00'
	WHEN AVG(temp)>25 THEN '#FF0000'
	ELSE '#FFFFFF'
	END
	AS temp_color
	FROM tbl_temperaturas
	GROUP BY mes
	ORDER BY mes ASC

El resultado de la consulta será éste:

A partir de ahora, nuestro código de servidor no necesitará comprobar ningún valor, ya que serán obtenidos directamente de la base de datos.

En la segunda parte,veremos cómo utilizar esta consulta con Dreamweaver y la sencillez de uso con una tabla dinámica.

Paginas: 1 2