valores sumar reemplazar por ejemplos convertir cero cambiar buscar sql null sum zero coalesce

sql - sumar - Cambiar una SUMA devolvió NULL a cero



reemplazar null por cero oracle (6)

Tengo un procedimiento almacenado de la siguiente manera:

CREATE PROC [dbo].[Incidents] (@SiteName varchar(200)) AS SELECT ( SELECT SUM(i.Logged) FROM tbl_Sites s INNER JOIN tbl_Incidents i ON s.Location = i.Location WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) GROUP BY s.Sites ) AS LoggedIncidents ''tbl_Sites contains a list of reported on sites. ''tbl_Incidents containts a generated list of total incidents by site/date (monthly) ''If a site doesnt have any incidents that month it wont be listed.

El problema que tengo es que un sitio no tiene ningún incidente este mes y, como tal, recibo un valor NULO devuelto para ese sitio cuando ejecuto este sproc, pero necesito que me devuelvan un cero / 0 dentro de una tabla en ssrs.

He intentado el uso de coalesce y es nula en vano.

SELECT COALESCE(SUM(c.Logged,0)) SELECT SUM(ISNULL(c.Logged,0))

¿Hay alguna manera de obtener este formato correctamente?

Aclamaciones,

Sotavento


La forma más fácil y más legible que he encontrado para lograr esto es a través de:

CREATE PROC [dbo].[Incidents] (@SiteName varchar(200)) AS SELECT SUM(COALESCE(i.Logged, 0)) AS LoggedIncidents FROM tbl_Sites s INNER JOIN tbl_Incidents i ON s.Location = i.Location WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) GROUP BY s.Sites


Me encontré con este problema en el oráculo. Oracle no tiene una función ISNULL (). Sin embargo, podemos usar la función NVL () para lograr el mismo resultado:

NVL(SUM(c.Logged), 0)


Podrías envolver el SELECT en otro SELECT así:

CREATE PROC [dbo].[Incidents] (@SiteName varchar(200)) AS SELECT COALESCE(TotalIncidents ,0) FROM ( SELECT ( SELECT SUM(i.Logged) as TotalIncidents FROM tbl_Sites s INNER JOIN tbl_Incidents i ON s.Location = i.Location WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) GROUP BY s.Sites ) AS LoggedIncidents )


Ponlo afuera

SELECT COALESCE( ( SELECT SUM(i.Logged) FROM tbl_Sites s INNER JOIN tbl_Incidents i ON s.Location = i.Location WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) GROUP BY s.Sites ), 0) AS LoggedIncidents

Si está devolviendo varias filas, cambie INNER JOIN a LEFT JOIN

SELECT COALESCE(SUM(i.Logged),0) FROM tbl_Sites s LEFT JOIN tbl_Incidents i ON s.Location = i.Location WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0) GROUP BY s.Sites

Por cierto, no coloque ninguna función o expresión dentro de las funciones agregadas si no está justificada, por ejemplo, no coloque ISNULL, COALESCE dentro de SUM, utilizando la función / expresión dentro del rendimiento de la mutilación de agregación, la consulta se ejecutará con el escaneo de tablas


Solo encontré este problema, la solución de Kirtan me funcionó bien, pero la sintaxis estaba un poco apagada. Me gustó esto:

ISNULL(SUM(c.Logged), 0)

La publicación me ayudó a resolver mi problema, así que gracias a todos.


Tendrás que usar ISNULL esta manera -

ISNULL(SUM(c.Logged), 0)

O, como dijo Michael, puedes usar una unión externa izquierda.