TITULO: Función Decode
DESCRIPCION: Decodifica el Valor pasado
como parámetro Valor de acuerdo a los valores
Permite pasar
valores de cualquier tipo, puesto que los parámetros y la propia
EXPLICACION:
En el Sql que manejamos en el
trabajo (yo ni soy ni trabajo de informático, pero hago mis pinitos) existe una
funcion llamada Decode que me he acostumbrado a utilizar porque me resulta muy
práctica.
En
Access no existe y en mas de una ocasión la he echado
de menos, así que me he puesto y he intentado emular el comportamiento de dicha
función. No es que con Access no se pueda hacer lo que hace esta función, a
base de Iif o de Select Case se puede hacer perfectamente pero, aparte de que
como he comentado, ya me había acostumbrado a utilizarla, es que me da la
impresión de que con ella se pueden simplificar mucho algunos codigos.
Como
muestra un boton: como algunos sabreis, el sistema de calificaciones
universitario está volviendo a cambiar, hasta hace poco se ha utilizado un
sistema de calificaciones a base de literales (supenso, aprobado, notable,
sobresaliente y Matricula). Cuando había que calcular la calificacion media se
hacia traduciendo esas notas por un valor de
Dim nb As Byte 'nota base
Dim ni As Byte 'rango de puntos correspondientes en el sistema 0-
Select Case Int(Me.NotaOriginal)
Case 0
nb
= 0
ni
= 5
Case 1
nb = 5
ni = 2
Case 2
nb = 7
ni = 2
Case 3
nb
= 9
ni
= 1
Case 4
nb
= 10
ni = 0
End Select
Me.NotaFinal = Round(nb + ((Me.NotaOriginal - Int(Me.NotaOriginal)) * ni),
2)
O
anidar una serie de Iif que hicieran lo mismo
Sin
embargo, con esta función Decode, la cosa puede quedar así:
Me.NotaFinal = Decode(Int(Me.NotaOriginal),
10, 0, Me.Nota * 5, 1, 5 + ((Me.NotaOriginal - 1) * 2), 2, 7 +
((Me.NotaOriginal - 2) * 2), 3, 9 + Me.NotaOriginal - 3)
De
la misma forma, resulta muy práctica su utilizacion en Sql para obtener
estadísticas: por ejemplo, tenemos una tabla de datos personales que incluye el
codigo postal o la provincia de residencia, pero no nos interesa obtener como
resultado las 52 provincias con su numero de residentes, sino solamente saber
cuantos son los dos o tres determinadas provincias:
SELECT decode([Prov],"Otras",18,"Granada",29,"Malaga")
AS Provincia, Count(DNI) AS NumAlum
FROM Alumnos
GROUP BY decode([Prov],"Otras",18,"Granada",29,"Malaga");
En fin, Espero que sea de utilidad
Marciano, Octubre de 2006