2017-09-29 1 views
0

J'essaie d'utiliser la division dans SQL Server. J'ai essayé l'extrait de code ci-dessous.Division dans SQL Server

SELECT m.[Profit]/f.[Target] 

et moi avons aussi essayé

SELECT SUM(m.[Profit]/f.[Target]) 

mais je reçois l'erreur

Division par zéro erreur rencontrée.
Avertissement: La valeur nulle est éliminée par un agrégat ou une autre opération SET.

Quelle est la raison pour cela et comment puis-je le réparer? Correctifs suggérés en ligne disent que ce code devrait fonctionner mais il ne fonctionne pas.

Merci

+1

La raison en est que l'une des valeurs de 'f [Cible. ] 'est 0. Vous pouvez le réparer en disant à SQL-Server ce que vous voulez faire dans ces cas. –

+0

En fonction des types de données de Profit et de cible, vous pourriez aussi être pris en compte par des maths entiers. Tant que l'un d'entre eux n'est pas un nombre entier, vous devriez être ok cependant. – HLGEM

Répondre

3

Utilisez NULLIF pour éviter divisé par zéro exception

SELECT SUM(m.[Profit]/NULLIF(f.[Target],0)) 

Lorsque le dénominateur est égal à zéro alors il sera remplacé par NULL

0

L'erreur que vous obtenez précise exactement quel est le problème. Votre code essaie de diviser par zéro, ce qui est mathématiquement impossible.

Veuillez NULLIF pour éviter cette erreur.

1

Si j'essaie de déterminer le% d'un objectif (inférée par des colonnes bénéfice/cible), je voudrais essayer quelque chose comme:

SELECT 
    CASE WHEN ISNULL(f.[Target],0) = 0 THEN NULL -- or whatever you need to return when the target value is undefined, or it is 0 
    ELSE m.[Profit]/f.[Target] END AS [result]