Utilizar “case when” en SQL y Access
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:
-
SELECT CASE columna
-
WHEN valor1 THEN 'es valor 1'
-
WHEN valor2 THEN 'es valor 2'
-
ELSE 'es valor 3'
-
END
-
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:
-
SELECT product,
-
SUM(CASE month(mnth) WHEN 1 THEN sales ELSE NULL END) AS jan,
-
SUM(CASE month(mnth) WHEN 2 THEN sales ELSE NULL END) AS feb,
-
SUM(CASE month(mnth) WHEN 3 THEN sales ELSE NULL END) AS mar,
-
SUM(CASE month(mnth) WHEN 4 THEN sales ELSE NULL END) AS apr,
-
SUM(CASE month(mnth) WHEN 5 THEN sales ELSE NULL END) AS may,
-
SUM(CASE month(mnth) WHEN 6 THEN sales ELSE NULL END) AS jun,
-
SUM(CASE month(mnth) WHEN 7 THEN sales ELSE NULL END) AS jul,
-
SUM(CASE month(mnth) WHEN 8 THEN sales ELSE NULL END) AS aug,
-
SUM(CASE month(mnth) WHEN 9 THEN sales ELSE NULL END) AS sep,
-
SUM(CASE month(mnth) WHEN 10 THEN sales ELSE NULL END) AS oct,
-
SUM(CASE month(mnth) WHEN 11 THEN sales ELSE NULL END) AS nov,
-
SUM(CASE month(mnth) WHEN 12 THEN sales ELSE NULL END) AS dec
-
FROM prodsales
-
GROUP BY product
Y para ara MsAccess podemos utilizar algo asi:
IIF(condicion, valor_si_verdad, valor_si_falso)
-
SELECT
-
cuenta,
-
IIf(columna = valor1, 'valor 1', 'valor 2') AS Valores
-
FROM tabla
Otro Ejemplo:
-
SELECT tip_documento, Cantidad, PUnitario, Total,
-
IIF( tip_documento=1, 'Entrada','Salida') AS Movimiento FROM DocumentosDetalle;
Uno mas:
-
SELECT tip_documento, PUnitario, Total, Cantidad, 'Entradas'
-
FROM DocumentosDetalle
-
WHERE (((tip_documento)=1))
-
UNION ALL
-
SELECT tip_documento, PUnitario, Total, Cantidad,'Salidas'
-
FROM DocumentosDetalle
-
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.
