Comment calculer le pourcentage pour la sum de la différence de deux colonnes en sql

J'ai deux colonnes dans la même table, qui doit être additionnée et get la différence et ensuite calculer le pourcentage?

SELECT sum([BillCount]) - sum([IssueCount]) as [Difference] FROM Invoice where [Year] = '2015' 

Dans la requête ci-dessus j'ai obtenu le résultat pour la différence comme 244234. Maintenant, j'ai besoin de calculer le pourcentage en divisant la différence avec le Billcount 260918 réel.

échantillon de données:

 SELECT sum(BillCount) as bills, sum(IssueCount) as issues FROM Invoice where [Year] = '2015' 

Résultat: Projets de loi: 260918 Sujets: 16684 Écart: 244234 Différence de division Par projet de loi: 244234/260918 = 0,93 Pourcentage: 0,93 * 100 = 93,60

J'ai utilisé le diviseur modifié de zéro à un. Mais j'obtiens le résultat en pourcentage en plusieurs lignes, comme pour chaque count individuel. Est-il possible que je puisse get le pourcentage exact dans une rangée comme nous calculons dans la calculasortingce? Merci.

Comme ça?

 SELECT sum([BillCount]) - sum([IssueCount]) as [Difference], (sum(IssueCount) - sum(BillCount)) / nullif(sum(BillCount), 0) as ptcdiff FROM Invoice where [Year] = '2015' 

Vous remarquerez que j'ai changé l'ordre de soustraction. Cela fait en sorte que c'est un changement négatif plutôt qu'un changement positif. Si vous avez besoin d'un absolu. changer, vous pouvez simplement lancer abs () autour du résultat. Vous pouvez également faire cuire ceci dans une fonction si cela a du sens

 declare @pctOld float = 260918, @pctNew float = 16684 select PctDiff = case when @PctNew is null or @PctOld is null then null when @PctNew = null or @PctOld = null then null when @PctNew = 0 and @PctOld = 0 then 0 when @PctNew = 0 and @PctOld > 0 then -100.00 when @PctNew >= 0 and @PctOld < 0 then null when @PctNew < 0 and @PctOld > 0 then null when @PctOld = 0 then null else ((@PctNew - @PctOld) / abs(@PctOld)) * 100.0 end 

Sous-requête comme ça

 Select Difference/nullif(sum(BIllCount), 1) From (SELECT sum([BillCount]) - sum([IssueCount]) as [Difference], FROM Invoice where [Year] = '2015') Per 

Divisez votre expression actuelle par la valeur agrégée SUM([BillCount])

Quelque chose comme ça

 select (sum([BillCount]) - sum([IssueCount])) / NULLIF(sum([BillCount]),0) * 100 FROM Invoice where [Year] = '2015'