Utilizar “case when” en SQL y Access

23 abril, 2008 por Mr. FotoPex Dejar una respuesta »

 

 

Cuando tenemos una columna en una tabla de SQL que puede contener diferentes valores y según el valor queremos mostrar un texto, número, etc. Disponemos de la sentencia CASE de SQL que tiene la sintaxis:

SQL:
  1. SELECT CASE columna
  2.   WHEN valor1 THEN 'es valor 1'
  3.   WHEN valor2 THEN 'es valor 2'
  4.   ELSE 'es valor 3'
  5.   END
  6.  FROM Tabla

Donde valor1, valor2, etc. son los valores que se encuentran almacenados en la base de datos y los textos "es valor 1", "es valor 2" Y "es valor 3" son los textos que se mostrarán en el resultado del SELECT.

Un ejemplo de ventas anuales:

SQL:
  1. SELECT product,
  2.   SUM(CASE month(mnth) WHEN 1 THEN sales ELSE NULL END) AS jan,
  3.   SUM(CASE month(mnth) WHEN 2 THEN sales ELSE NULL END) AS feb,
  4.   SUM(CASE month(mnth) WHEN 3 THEN sales ELSE NULL END) AS mar,
  5.   SUM(CASE month(mnth) WHEN 4 THEN sales ELSE NULL END) AS apr,
  6.   SUM(CASE month(mnth) WHEN 5 THEN sales ELSE NULL END) AS may,
  7.   SUM(CASE month(mnth) WHEN 6 THEN sales ELSE NULL END) AS jun,
  8.   SUM(CASE month(mnth) WHEN 7 THEN sales ELSE NULL END) AS jul,
  9.   SUM(CASE month(mnth) WHEN 8 THEN sales ELSE NULL END) AS aug,
  10.   SUM(CASE month(mnth) WHEN 9 THEN sales ELSE NULL END) AS sep,
  11.   SUM(CASE month(mnth) WHEN 10 THEN sales ELSE NULL END) AS oct,
  12.   SUM(CASE month(mnth) WHEN 11 THEN sales ELSE NULL END) AS nov,
  13.   SUM(CASE month(mnth) WHEN 12 THEN sales ELSE NULL END) AS dec
  14. FROM prodsales
  15. GROUP BY product

Y para ara MsAccess podemos utilizar algo asi:

IIF(condicion, valor_si_verdad, valor_si_falso)

SQL:
  1. SELECT
  2. cuenta,
  3. IIf(columna = valor1, 'valor 1', 'valor 2') AS Valores
  4. FROM tabla

Otro Ejemplo:

SQL:
  1. SELECT tip_documento, Cantidad, PUnitario, Total,
  2. IIF( tip_documento=1, 'Entrada','Salida') AS Movimiento FROM DocumentosDetalle;

Uno mas:

SQL:
  1. SELECT tip_documento,  PUnitario, Total, Cantidad, 'Entradas'
  2. FROM DocumentosDetalle
  3. WHERE (((tip_documento)=1))
  4. UNION ALL
  5. SELECT tip_documento,  PUnitario, Total, Cantidad,'Salidas'
  6. FROM DocumentosDetalle
  7. WHERE (((tip_documento)=2));

Espero que te sirvan estos detalles y muchas gracias por los comentarios que dejan, así si dan ganas de seguir escribiendo para ustedes.

Publicidad

1 comentario

  1. Hola gracias por tu ejemplos.. yo trare en firebird de utilizar las sumas con case pero no me dio resultado nose si coloque mal algo.. pero solucione haciendo vistas algunas operaciones mas..

    aprovechando queria preguntar si es que no existe algun problema si se utiliza una sumatoria de sumas es decir:

    sum(campo1)+sum(campo2) as total1, sum(campo3)+sum(campo4) as total2

    quiero saber si hay alguna incidencia en cuanto a tiempo de ejecucion de la consulta.

    gracias

Deja un comentario