Сумма отрицательных и положительных чисел

Я использую SQL Server 2008. У меня есть продажи для клиентов, и я хочу сравнить его с тем, что клиент купил в прошлом году, а также рассчитать рост. Все работает нормально, но как только у клиента есть отрицательный результат на один из месяцев, он возвращает неверные данные для Target & Growth.

Customer SalesLastYearMonth SalesThisYearMonth Target Growth ------------------------------------------------------------------------------ abcd -1 15 ???? ??? 

Код:

 SELECT Customer, CASE WHEN SalesThisYearMonth IS NULL THEN (SalesLastYearMonth * -1) WHEN SalesLastYearMonth IS NULL THEN SalesThisYearMonth ELSE SalesThisYearMonth - SalesLastYearMonth END as Target, CASE WHEN SalesThisYearMonth IS NULL THEN -1 WHEN SalesLastYearMonth IS NULL THEN 1 WHEN SalesThisYearMonth = 0 then -1 WHEN SalesLastYearMonth = 0 then 1 ELSE ( SalesThisYearMonth - SalesLastYearMonth) / SalesLastYearMonth END AS Growth 

Предполагая, что вы хотите TARGET = 16, GROWTH = 16, тогда это должно сделать это:

 SELECT Customer, CASE WHEN SalesThisYearMonth IS NULL THEN (SalesLastYearMonth * -1) WHEN SalesLastYearMonth IS NULL THEN SalesThisYearMonth ELSE SalesThisYearMonth - SalesLastYearMonth END as Target, CASE WHEN SalesThisYearMonth IS NULL THEN -1 WHEN SalesLastYearMonth IS NULL THEN 1 WHEN SalesThisYearMonth = 0 then -1 WHEN SalesLastYearMonth = 0 then 1 ELSE ( SalesThisYearMonth - SalesLastYearMonth) / ABS(SalesLastYearMonth) END AS Growth 

Тем не менее, я действительно не уверен в том, что РОСТ там – не уверен, почему вы делите SalesLastYearMonth. В случае выше это работает, но если SalesLastYearMonth равно -4, делится на 4, что вы хотите?

Вы делите на отрицательное число:

 SalesLastYearMonth = -1 

Вам нужно либо проверить его, либо вернуть абсолютное значение.

Просто небольшое предложение. попробуйте использовать функцию ISNULL (). если выбранное значение равно NULL, вы можете указать возвращаемое значение по умолчанию. Насколько я знаю, это намного быстрее, чем CASE WHEN.

  • SQL SUM на основе первых двух символов одного столбца, одной таблицы
  • SQL Server 2012: сумма над порядком, дает ошибку Неправильный синтаксис около 'order'
  • Вопросы SQL SUM ()
  • Условная сумма в SQL Server
  • Поведение приведения типа SQL Server
  • T-SQL CTE применяется процентная формула и суммирует значения для каждой даты
  • TSQL. Вы вычисляете значения, затем суммируете или суммируете сначала, затем вычисляете значения?
  • Выберите отдельную сумму из диапазона
  • Данные суммирования SQL между двумя датами в одном столбце
  • SQL-запрос, чтобы найти сумму всех строк и сумму частей строк в группе по предложению
  • SQL Server Query LEFT JOIN, SUM и GROUP BY, и я в тупике!
  • Interesting Posts

    SQL, чтобы возвращать родительские строки, даже если никакие дочерние строки

    Столбец недействителен в списке выбора, поскольку он не содержится в агрегатной функции или в предложении Group By

    Как указать параметры хранимой процедуры

    Используйте TSql, чтобы найти исходную таблицу, из которой столбец в представлении

    Ошибка запуска обновления после того, как новая строка вставлена ​​в одну таблицу

    Установка Microsoft SQL Server 2012 Попытка выполнить несанкционированную операцию

    Как запустить sql-скрипт с использованием C #

    Как создать числовые диапазоны из списка чисел?

    Системный DSN не работает при запуске Rails в качестве службы Windows

    Как подключиться к базе данных ANY из C #?

    Дата формата даты – месяц-год

    Трудный запрос группировки

    Как использовать оператор case для объявления локальной переменной для последующего подзапроса?

    Добавление ограничения SQL на основе значения строки

    Преобразование XML-функции в SQL SERVER

    Давайте будем гением компьютера.