Consulta en BD sin datos y que salga cero

Tengo una consulta en Access 2007, la cual hace la suma de unos campos(campos suma) condicionado a otro campo (campo condición), el resultado es cero ya que en la actualidad no existen datos con dicha condición (campo condición) pero en un futuro si tendré. La consulta me sale en blanco, ¿existe alguna forma para que me salga cero?.

1 respuesta

Respuesta
1

La consulta sale en blanco ya que el resultado de SUM es NULL. Para mostrar 0 en lugar de null puede usar el método isnull para comprobar si la suma del campo es vacia y luego IIF para aplicar una condición al resultado.

Sería algo así:

SELECT IIF(isnull(SUM(campo)),0,SUM(campo))

isnull() devuelve true si el campo que le estás pasando (en este caso SUM(campo) ) es nulo o false en caso contrario.

IIF comprueba una condición y, en caso de que dicha condición sea true devuelve el segundo parámetro y, en caso de false, el tercero.

De este modo IIF devuelve 0 si isnull(SUM(campo)) es true y SUM(campo) si es false.

Gracias por la respuesta, pero no sé bien donde tengo que poner dicha condición.

En el código SQL de tu consulta Access.

Perdona mi ignorancia en estos temas, en el código SQL que tengo es:

SELECT Sum([01_Líneas].[Longitud aéreo]) AS [SumaDeLongitud aéreo], Sum([01_Líneas].[Longitud subterráneo]) AS [SumaDeLongitud subterráneo], Sum([01_Líneas].[Longitud total]) AS [SumaDeLongitud total]
FROM 01_Líneas
WHERE ((([01_Líneas].[Compañía suministradora])="HIDROCANTÁBRICO"));

Donde, y como iría la condición que me indicas. Mil gracias

Tranquilo, para eso estamos :)

Tendrías que sustituir el actual SUM por el que te he propuesto (modificando los campos claro está).

¿Cuál es el SUM que te devuelve nulo y quieres controlar?

¡Gracias! Lo conseguí, es para los tres SUM

Perdona, una vez más. Me pasa lo mismo pero cuando en lugar de hacer suma "SUM" hago cuenta "COUNT", utilizando varios campos condicionados. En caso de un solo campo condicionado si me sale cero.

¿Podrías ponerme la consulta?

SELECT Count([01_Líneas].Nombre) AS [CuentaDeNombre linea], [01_Líneas].Tensión, [01_Líneas].[Compañía suministradora]
FROM 01_Líneas
WHERE ((([01_Líneas].[Compañía suministradora])="HIDROCANTÁBRICO"))
GROUP BY [01_Líneas].Tensión, [01_Líneas].[Compañía suministradora]
ORDER BY [01_Líneas].Tensión;

Debería ser igual que con el SUM:

SELECT IIF(isnull(Count([01_Líneas].Nombre)),0, Count([01_Líneas].Nombre)) AS [CuentaDeNombre linea], [01_Líneas].Tensión, [01_Líneas].[Compañía suministradora]
FROM 01_Líneas
WHERE ((([01_Líneas].[Compañía suministradora])="HIDROCANTÁBRICO"))
GROUP BY [01_Líneas].Tensión, [01_Líneas].[Compañía suministradora]
ORDER BY [01_Líneas].Tensión;

Lamento decirte que no, me sigue saliendo la consulta sin datos en este caso de "COUNT"

Por lo visto, el ISNULL de Access no funciona igual al de SQL SERVER que es el que conozco y comentan de usar en su lugar la función Nz() (NullToZero) así que prueba simplemente con:

Nz(Count([01_Líneas]. Nombre), 0)

Como ves es mucho más sencillo ya que solo requiere dos parámetros: el primero que es el que va a evaluar y, en caso de que sea NULL, devuelve el segundo.

Aquí la documentación: http://www.fmsinc.com/microsoftaccess/vba/nz.htm 

Lamento que lo que me indicas no me sirve, las datos me siguen saliendo en blanco.

Pues lamento no poder serte de más ayuda ya que Access no es una área de trabajo que controle al dedillo.

Por la documentación que he encontrado el método Nz() debería serte suficiente para hacer lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas