una tabla sumar suma microsoft formularios desde consulta como cero cantidades campos campo calculos calculados calculado agregar acces ms-access vba ms-office

ms access - tabla - Función multiplicar agregada



microsoft access desde cero (2)

Tengo una tabla de lo siguiente:

1 X 10 2 X 30 3 Y 5 4 Y 2 ...etc

Necesito convertirlo en:

X 300 //(10 * 30) Y 10 //(5 * 2)

así que de hecho estoy buscando una especie de función de multiplicación que pueda usar como suma, media y otras cosas ... ¿existen chicos?

por ejemplo:

select field2, **multiply**(field3) from t group by field2

Gracias


Idealmente, Access SQL tendría una función agregada de PRODUCT disponible, pero no es así. Sin embargo, podemos simularlo recordando lo que aprendimos sobre los logaritmos en la escuela (o no ...), y recordando que el anti-registro de la suma de los registros es igual al producto:

SELECT field2, EXP(Sum(LOG(Field3))) AS ProductOfField3 FROM t GROUP BY Field2

Tenga en cuenta que mientras que una verdadera función de PRODUCT simplemente devolvería 0 para un grupo si hay valores cero, esta solución fallará si hay valores cero, así que tenga cuidado con eso. Además, este enfoque no funcionará si hay valores negativos.

Para tratar con ceros podríamos hacer esto:

SELECT field2, EXP(Sum(LOG(IIf(Field3 = 0, 1, Field3)))) AS ProductOfField3, MIN(ABS(Field3)) AS MinOfAbsField3 FROM t GROUP BY Field2

y luego ignorar el valor de ProductOfField3 para cualquier fila donde MinOfAbsField3 sea ​​cero (ya que esto indica un grupo que contiene un cero, por lo tanto, el producto ''verdadero'' debe ser 0 )

Para lidiar con los valores negativos, podemos hacer más esto:

SELECT field2, EXP(Sum(LOG(IIf(Field3 = 0, 1, ABS(Field3))))) AS ProductOfField3, MIN(ABS(Field3)) AS MinOfAbsField3, SUM(IIf(Field3 < 0, 1, 0)) AS SumOfNegativeIndicator FROM t GROUP BY Field2

e interpretar los resultados con estas reglas:

  • Si MinOfAbsField3 es cero, no ProductOfField3 cuenta ProductOfField3 para esa fila - el producto es cero
  • De lo contrario, la respuesta requerida para una fila dada es ProductOfField3 , negada si SumOfNegativeIndicator es impar en esa fila

Puede definir las siguientes dos funciones:

Public Function ResetProd() As Boolean Call Prod(Null) ResetProd = True End Function Public Function Prod(nNumber As Variant) As Double Static nPrevNumber As Double If IsNull(nNumber) Then nPrevNumber = 1 Else nPrevNumber = nPrevNumber * nNumber End If Prod = nPrevNumber End Function

... y úsalas de la siguiente manera:

SELECT PROD(_column_for_wich_you_want_product_) FROM _your_table_ WHERE RESETPROD()