Comment puis-je remplacer NULL par 0 lors de l’obtention d’une valeur unique à partir d’une fonction SQL?

J’ai une requête qui compte le prix de tous les articles entre deux dates. Voici l’instruction select:

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

Vous pouvez supposer que toutes les tables ont été correctement configurées.

Si je fais une sélection entre deux dates et qu’il n’y a aucun élément dans cette plage de dates, la fonction renvoie NULL en tant que TotalPrice plutôt que 0.

Comment puis-je m’assurer que si aucun enregistrement n’est trouvé, 0 est renvoyé plutôt que NULL?

La plupart des serveurs de bases de données ont une fonction COALESCE , qui renverra le premier argument qui est non nul. Par conséquent, ce qui suit devrait faire ce que vous voulez:

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

[modifier]

Juste pour clarifier les choses car il semble y avoir beaucoup de discussions sur “COALESCE / ISNULL renverra toujours NULL si aucune ligne ne correspond”, essayez cette requête que vous pouvez copier-coller directement dans SQL Server en l’état:

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

Notez que la clause where exclut de la considération toutes les lignes de sys.columns, mais que l’opérateur ‘sum’ génère toujours une seule ligne renvoyée nulle, ce qui entraîne la fusion des corrections en une seule ligne avec un 0.

J’espère que cela aide à l’expliquer.

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

Cela devrait faire l’affaire.

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

Edit: On dirait que tout le monde m’a battu haha

Trouvé la réponse.

ISNULL() détermine quoi faire lorsque vous avez une valeur nulle.

Dans ce cas, ma fonction renvoie une valeur NULL, il fallait donc spécifier un 0 à retourner à la place.

 SELECT ISNULL(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 table a des lignes dans la réponse, elle renvoie le SUM (Price). Si le SOMME est NULL ou s’il n’y a pas de lignes, il retournera 0.

Mettre COALESCE (SUM (Price), 0) ne fonctionne PAS dans MSSQL si aucune ligne n’est trouvée.

Vous pourriez utiliser

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

Je suis sûr à 99% que ça va marcher.

ORACLE / PLSQL:

FONCTION NVL

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

Cette instruction SQL renverrait 0 si le SUM(Price) renvoyait une valeur nulle. Sinon, la valeur SUM(Price) renvoyée.

La manière la plus simple de procéder consiste à append zéro à votre résultat.

c’est à dire

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

J’espère que cela t’aides!!