Сумма отрицательных и положительных чисел
Я использую 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
- sql count / sum количество вызовов до определенной даты в другом столбце
- SQL: как использовать SUM два значения из разных таблиц
- Сумма по столбцам и строкам
- Сумма двух столбцов с объединением и группой другим столбцом
- SQL Query для получения сумм товаров в иерархической структуре между двумя таблицами
- Получение сумм из нескольких таблиц
- Объединить один столбец в несколько столбцов на основе критериев SQL Server
- Сумма столбца, где столбец даты равен году - SQL
- Заполнение столбца с вычисленными значениями из другого столбца в T-SQL
- выражение - sql report builder 2008 r2 - как для специального поля SUM
- Функция SUM не возвращает десятичную
- Суммирование выражения case при работе с датами
- SQL - группировка многих категорий по нескольким категориям
Предполагая, что вы хотите 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.