Процентное изменение возвращает неверный результат - PullRequest
0 голосов
/ 27 августа 2018

Я занимаюсь этим около 2 часов. Я пытаюсь рассчитать процентное изменение между двумя суммами. Вот текущий код.

RejectedVsSubmittedSum = ((CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END
                                 -ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0))
                                 /NULLIF(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0))
                                 * 100

Эта строка возвращает 225000.

CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END

Эта строка возвращает 25000.

ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0)

Подразделение.

NULLIF(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0)

Тогда я раз на 100.

Итак, 225000 - 25000/25000 * 100 возвращает 800 . Это то, что я возвращаю, но на основании этого сайта http://www.percent -change.com / index.php? Y1 = 225000 & y2 = 25000 мой результат неверный, и я должен возвращать -88,88888888%.

У меня нет реального опыта выполнения этих вычислений в SQL, поэтому я предполагаю, что веб-сайт правильный. Кто-нибудь может увидеть, действительно ли я делаю что-то не так?

Я уже просил это Рассчитать процент между двумя значениями , но сейчас я использую другой набор чисел, теперь я использую суммы денег, а не просто счет. Я пытался использовать ту же логику (потому что это имело смысл), но, похоже, я возвращаю неправильный результат.

1 Ответ

0 голосов
/ 27 августа 2018

По формуле ((y2 - y1) / y1)*100 ваш запрос должен быть таким:

RejectedVsSubmittedSum = ( ( (ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0) ) 
    - (CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END) ) 
          / (CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END) ) * 100


y1: CASE WHEN COUNT(ClaimMain.ClaimNumber) > 0 THEN SUM(PCover.SumAssured) END
y2: ISNULL(SUM(CASE ClaimMain.CurrentStatus WHEN 25 THEN PCover.SumAssured END),0)
...