Pregunta

Tengo una consulta que cuenta el precio de todos los artículos entre dos fechas. Aquí está la declaración de selección:

SELECT SUM(Price) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Puede asumir que todas las tablas se han configurado correctamente.

Si hago una selección entre dos fechas y no hay elementos dentro de ese rango de fechas, la función devuelve NULL como TotalPrice en lugar de 0.

¿Cómo puedo asegurarme de que si no se encuentran registros, se devuelve 0 en lugar de NULL?

¿Fue útil?

Solución

La mayoría de los servidores de bases de datos tienen una función COALESCE , que devolverá el primer argumento que no es nulo, por lo que lo siguiente debe hacer lo que desee:

SELECT COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

[editar]

Solo para aclarar las cosas, ya que parece haber mucha discusión sobre " COALESCE / ISNULL aún devolverá NULL si no coinciden las filas " ;, intente esta consulta, puede copiar y pegar en SQL Server tal como está:

SELECT coalesce(SUM(column_id),0) AS TotalPrice 
FROM sys.columns
WHERE (object_id BETWEEN -1 AND -2)

Tenga en cuenta que la cláusula where excluye todas las filas de sys.columns de la consideración, pero el operador 'sum' todavía da como resultado que se devuelva una sola fila que es nula, lo que se fusiona para ser una sola fila con un 0.

Espero que esto ayude a explicarlo.

Otros consejos

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Eso debería hacer el truco.

SELECT 0+COALESCE(SUM(Price),0) AS TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)
SELECT COALESCE(
    (SELECT SUM(Price) AS TotalPrice 
    FROM Inventory
    WHERE (DateAdded BETWEEN @StartDate AND @EndDate))
    , 0)

Si la tabla tiene filas en la respuesta, devuelve la SUMA (Precio). Si SUM es NULL o no hay filas, devolverá 0.

Poner COALESCE (SUMA (Precio), 0) NO funciona en MSSQL si no se encuentran filas.

Editar: parece que todos los demás me derrotaron jaja

Encontré la respuesta.

ISNULL () determina qué hacer cuando tienes un valor nulo.

En este caso, mi función devuelve un valor nulo, por lo que necesitaba especificar un 0 para devolverlo.

SELECT ISNULL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded 
BETWEEN @StartDate AND @EndDate)

Podrías usar

SELECT ISNULL (SUM (ISNULL (Precio, 0)), 0) .

Estoy 99% seguro de que funcionará.

ORACLE / PLSQL:

FUNCION NVL

SELECT NVL(SUM(Price), 0) AS TotalPrice 
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Esta declaración SQL devolvería 0 si SUM (Price) devolviera un valor nulo. De lo contrario, devolvería el valor SUM (precio) .

La forma más sencilla de hacerlo es simplemente agregar cero al resultado.

es decir,

$A=($row['SUM'Price']+0);
echo $A;

Espero que esto ayude !!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top