Access - Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

 
Vista:
Imágen de perfil de Miguel

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Miguel (4 intervenciones) el 05/01/2022 20:47:36
Buenas!

Estoy trabajando en Access, en una consulta, la consulta toma los datos de una Tabla, la cual trae 3 o 4 campos, una de ellos se llama "Importe".

El campo importe contiene valores positivos y valores negativos. Es una tabla que se actualiza mes a mes. Normalmente tiene importes positivos y negativos. Pero ocasionalmente pueden no existir importes negativos o menores a cero. Aqui es donde la simple consulta, falla y me deja los datos nulos.

Que busca la consulta? que al ejecutarla me indique, cuantas operaciones tienen importe positivo, y cual es el total del importe positivo, y de la misma forma cuantas operaciones tienen importe negativo y cual es la suma de ese importe negativo. La consulta calculaba los 4 valores, pero si por ejemplo no tengo importes negativos, el resultado de la consulta es todo nulo.

Hice pruebas utilzando la funcion Nz, usando Iif o SiInm y no logro que ponga un cero para el caso donde no existan importes negativos, o sea operaciones negativas: 0 Total importe negativo: 0 y asi me mostraria el total de operaciones positivas, y el total del importe positivo.

Adjunto la tabla (Base) y la consulta (Consulta 1).

Imagino que la solucion debe ser bastante simple, pero hace bastante que estoy modificando la consulta, alcanzando siempre el mismo resultado.

Muchas gracias, saludos!

Miguel
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Anonimo (3324 intervenciones) el 06/01/2022 00:05:37
Unas imágenes no muestran que se ha intentado, por lo que es posible que se ofrezcan soluciones que se han intentado y ... fracasado.

Para contar registros (que cumplan una o varias condiciones) no existe problema, lo peor que podrá ocurrir: que la cuenta de un cero por no tener datos.
(un nulo solo lo debería dar el caso de que no existiesen registros que contar: tabla u origen de datos vacío).

Y se llega a la segunda parte: sumar valores.

Lo que puede ser nulo no es la suma, es el dato y es al dato al que 'hay que manipular', en lo publicado:

Se crea un campo calculado (o se crea un alias), es sobre el donde hay que aplicar la función Nz

Antes ==> Total: Importe ==
Después ==> Total: Nz(Importe;0)

Si no hay un valor en el campo importe le asigna un cero ¿es lo que se necesita?

Notas:
.- La condición es que sea menor que cero, lo que de entrada descarta ese registro (si su valor es un NULL ya que se le asigna un cero)

.- Habrá que considerar si lo idóneo es que la condición sea 'ser diferente de nulo' y en todo caso como condición en el campo que cuenta (es el mismo campo): que sea menor que cero.

.- Con datos se podrán hacer pruebas sin ellos solo teorías. (los datos, los que se posean esto es: los reales)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Miguel

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Miguel (4 intervenciones) el 06/01/2022 15:58:30
Hola Anonimo! gracias por tu pronta respuesta!

(un nulo solo lo debería dar el caso de que no existiesen registros que contar: tabla u origen de datos vacío). La Tabla que adjunte , en este caso no contiene ningún registro con valor negativo o menor a cero, son todos positivos, por lo tanto la Consulta que solicita que sume los importes negativos se encuentra ante algo que no existe y arroja un dato Null (o eso es lo que creo)

Si no hay un valor en el campo importe le asigna un cero ¿es lo que se necesita? Si exacto, es lo que se necesita, que le asigne un cero al encontrar un valor nulo en ese campo, pero aunque utilice la función Nz el valor sigue quedando nulo, seguramente lo estoy aplicando de forma incorrecta.

- Habrá que considerar si lo idóneo es que la condición sea 'ser diferente de nulo' y en todo caso como condición en el campo que cuenta (es el mismo campo): que sea menor que cero. Acá me perdí un poco, no entendí bien, seria cambiar el enfoque al realizar la consulta??

.- Con datos se podrán hacer pruebas sin ellos solo teorías. (los datos, los que se posean esto es: los reales) Los datos de la tabla adjunta son reales, solo deje 10 para hacerla mas simple, son todos importe positivos, ningún importe negativo.

Segui trabajando y me parece haber encontrado la solucion para que me ponga un cero en la suma de importes negativos, en caso que estos no existan, y si me muestre la suma de los valores negativos cuando si existan. Ahora no logro resolver la parte donde cuenta esos registros negativos.

Te adjunto la Tabla "Base" con los datos de origen, 3 consultas donde me da resultados nulos, no lo buscado, y una "cuarta" consulta, donde si logré que ponga un cero, cuando no existan valores negativos, y me pone la suma de los importes negativos, para esto modifique dos de los importes de la tabla adjunta, cambiando a importes negativos.

Faltaría que cuente correctamente la cantidad de importes negativos, el resultado debería haber sido 2, sin embargo cuenta 10 (que es el total de registros con importe)

Agradeceria lo puedas revisar y me indiques donde estaria el error.

Muchas gracias

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Anonimo (3324 intervenciones) el 06/01/2022 20:17:33
Entiendo lo de la LPD, pero no le veo sentido en este entorno en el que 'esos datos' pueden ser cualquier cosa (son simples números)

No veo tabla adjunta alguna, solo hay capturas de pantalla de unas consultas de agrupación a las que no les veo sentido practico.

Entenderás que si yo 'fabrico' un entorno que se asemeje al que 'tu ya tienes' puede ser el mismo o ser otra cosa pues basta utilizar un campo de texto en el que solo se introduzcan caracteres numéricos en lugar de utilizar un campo de tipo numérico adecuado, para que sean diferentes y además incompatibles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Miguel

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Miguel (4 intervenciones) el 06/01/2022 21:21:44
Hola Anonimo, gracias por responder!

Si puede ser que me olvide de adjuntar la Tabla. Mira, arme un pequeño Access con la Tabla y la Consulta únicamente, y es lo que adjunto.

Si miras las Tabla, veras que los últimos 2 registros contiene el importe con signo negativo, si ejecutas la Consulta, te mostrará de forma correcta el importe total negativo, no asi la cantidad de operaciones, (deberia indicar 2 e indica 10)

Luego, si a esos 2 registros de la tabla Base le modificas el importe y lo cambias a positivo, y ejecutas la consulta, el importe Total mostrará un cero (esto es lo deseado, parece que quedo de forma correcta: Total: Suma(SiInm([Importe]<0;[Importe];0))

Pero me falla la consulta que calcula las Operaciones (total de registros con importe negativo)

Espero que asi se logre entender mejor lo que me falta solucionar.

Gracias

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Anonimo (3324 intervenciones) el 07/01/2022 00:47:59
La SQL que genera Access y que (si hay datos) devuelve el resultado correcto.

1
2
3
SELECT Count(Base.Importe) AS CuentaDeImporte, Sum(Base.Importe) AS SumaDeImporte
FROM Base
WHERE (((Base.Importe)>0));


Si no hay datos, el campo 'cuenta' devuelve un cero y cero es cero también para la suma.

Un calculo con cero elementos carece de sentido, si esa consulta se utiliza como origen de datos para un formulario informe, 'esteticamente' se puede poner un cero utilizando la propiedad formato del campo que muestra ese dato.

Access en los cuadros de texto de los formularios/informes, diferencia los valores positivos, los negativos , el cero y el null de su origen de datos permitiendo dar un formato independiente para cada tipo de resultado.

Si se utiliza en un calculo para cualquier otra funcionalidad, basta filtrar los elementos cuya cuenta sea cero (o tratarlos como lo que son: una excepción).

NOTA:
Para ver la consulta:
Inicia una nueva, NO seleccionar ninguna tabla, aparecerá el icono de SQL, click en el y se abre una ventana que solo contiene esto 'Select;'

Sobrescribirlo con la SQL adjuntada y se podrá ver el resultado y/o su vista diseño (el método de borrar el contenido y pegar lo aportado, también funciona).

Si se desea utilizar un condicional (IIF ==> Silnm u otros) el referente adecuado es el campo cuenta (que será cero o diferente de cero).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Anonimo (3324 intervenciones) el 07/01/2022 22:57:58
Me quedo en el tintero lo de poner un cero ... inventado

Aclarando conceptos:

En una única consulta no es posible asignar valor a un dato que no existe (cero registros implican que no hay 'donde guardar nada').

La opción: utilizar una consulta basada en esa consulta

Utilizando los datos aportados, solo se precisa cambiar la condición para obtener los valores superiores( '>' ), los inferiores ('<' ) o los ceros ( '=' ) que abarcarían los nulos.

La consulta base a la que llamare 'consulta_0'

1
2
3
SELECT Count(Base.Importe) AS CuentaDeImporte, Sum(Base.Importe) AS SumaDeImporte
FROM Base
WHERE (((Base.Importe)=0));

Resultados obtenidos:
.- con Base.Importe > 0 ===> Registros 8 su suma 29124

.- con Base.Importe < 0 ===> Registros 2 su suma -2257

.- con Base.Importe = 0 ===> Registros 0 su suma ??

En base a ella: una nueva consulta:

1
2
SELECT Consulta_0.CuentaDeImporte, Val(Nz([SumaDeImporte],0)) AS Suma
FROM Consulta_0;

Si se dan las condiciones (que no existan registros que cumplan con el filtro aplicado) La cuenta será un cero, la suma un NULL,
En esas condiciones Access desconocerá el tipo de campo y para garantizar que devuelva un numero (por defecto suele devolver un texto) hay varias opciones, una es la función VAL, la otra efectuar una operación matemática, en el ejemplo se utiliza la función 'VAL'

Resultados obtenidos:
.- con Base.Importe > 0 ===> Registros 8 su suma 29124

.- con Base.Importe < 0 ===> Registros 2 su suma -2257

.- con Base.Importe = 0 ===> Registros 0 su suma 0

Se pueden integrar ambas consultas en una, los paréntesis fuerzan que se ejecute la primera consulta y sobre ella la segunda, todo ello en una única llamada (y sin necesidad de guardar la consulta inicial, ahora integrada)

1
2
3
4
SELECT Temporal.CuentaDeImporte, Val(Nz(Temporal.SumaDeImporte,0)) AS Suma
FROM (SELECT Count(Base.Importe) AS CuentaDeImporte, Sum(Base.Importe) AS SumaDeImporte
FROM Base
WHERE Base.Importe=0) as Temporal;

Solo a titulo de curiosidad sin utilizar la función VAL, en su lugar una operación matemática:

1
2
3
4
SELECT Temporal.CuentaDeImporte, Nz(Temporal.SumaDeImporte,0) *1  AS Suma
FROM (SELECT Count(Base.Importe) AS CuentaDeImporte, Sum(Base.Importe) AS SumaDeImporte
FROM Base
WHERE Base.Importe =0) as Temporal;

En una única línea también funciona:

1
SELECT Registros, Nz(Sumas,0) *1  AS Suma FROM (SELECT Count(Importe) AS Registros, Sum(Importe) AS Sumas FROM Base WHERE Importe =0) as Temporal;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Miguel

Access Consulta con resultado Nulo, no logro que refleje un cero en su lugar.

Publicado por Miguel (4 intervenciones) el 12/01/2022 04:28:50
hola Anonimo!

Perdón por no haber respondido antes, pero me cayo bastante trabajo y no me quedo tiempo para revisar tus comentarios.

Bueno hoy estuve revisando y probando tus consultas en el mini access que habia adjuntado, asi pude resolver perfectamente el problema que tenia. Me base en tu "Consulta_0" y en la siguiente consulta, utilizando las funciones Val y Nz. Corregí y modifique las consultas que había armado, y elimine algunos caminos alternativos que estaba intentando y que no me llevaban a nada.

Te agradezco mucho el tiempo que le dedicaste a revisar mi problema y todas las explicaciones que me dejaste. Siempre que me topo con datos nulos o con operaciones con fechas empiezo a llorar, generalmente lo puedo resolver, pero esta vez estaba como dando vueltas por el mismo lado y no avanzaba.

Muchas gracias por tu ayuda, saludos desde Buenos Aires.

Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar