Requête alternative pour calculer le pourcentage

Dans SQL Server pour le calcul du pourcentage, j'ai une fonction comme ci-dessous:

CREATE FUNCTION [dbo].[fuGetPercentage] ( @part FLOAT, @total FLOAT ) RETURNS FLOAT AS BEGIN DECLARE @Result FLOAT = 0, @Cent FLOAT = 100; IF (isnull(@total, 0) != 0) SET @Result = isnull(@part, 0) * @Cent / @total; RETURN @Result END 

Je me request s'il existe une meilleure alternative pour cela, avec les mêmes vérifications et un meilleur pourcentage de calcul comme ci-dessous:

 SELECT (CASE ISNULL(total, 0) WHEN 0 THEN 0 ELSE ISNULL(part, 0) * 100 / total END) as percentage 

Je veux l'utiliser directement après SELECT comme ci-dessus.

Il y a un problème avec l'utilisation de fonctions telles que ISNULL . La requête n'utilisera pas d'index dans ce cas. Si la beauté du code n'est pas en premier lieu, alors vous pouvez faire quelque chose comme ça:

 SELECT CASE WHEN total * part <> 0 /* will check that both total and part are not null and != 0*/ THEN part * 100 / total ELSE 0 END AS percentage; 

J'utilise @DmisortingjKultasev réponse mais maintenant, j'ai trouvé qu'il a deux problèmes:

  1. Erreur sur la conversion en raison du débordement du résultat de la multiplication.
  2. Problème de performance à cause de cette multiplication des maths et de sa conversion.

Donc je le change à ceci:

 SELECT CASE WHEN total <> 0 AND part <> 0 THEN -- This will return 0 for Null values part * 100 / total ELSE 0 END AS percentage;