#sql #sql-server #sql-server-2005
#sql #sql-сервер #sql-server-2005
Вопрос:
Я использую SUM()
функцию. Но SUM()
суммирует отрицательное значение в столбце. В столбце, если значение положительное, его следует добавить, а для отрицательных значений следует вычесть, а не добавлять как SUM()
20.00
20.00
20.00
20.00
-20.00
20.00
20.00
40.00
20.00
20.00
20.00
20.00
20.00
-20.00
-20.00
20.00
sum() должен возвращать 220, а не 440.
Возвращает 440.
Комментарии:
1. если у вас есть 1,2, -2 в качестве строк в столбце, и вы вызвали sum для этого, результат будет равен 1. Разве это не то поведение, которое вы получаете?
2. если вы добавляете отрицательное значение к положительному значению — на самом деле это вычитание 3 (-5) = 3 -5 = -2
3. Пожалуйста, добавьте несколько примеров (отредактируйте свой вопрос): какие данные у вас есть, что из этого делает SUM(), что вы хотите получить?
4. @hrishi — Это возвращает 220 онлайн-демонстрация Вы используете его в объединении, которое удваивает количество суммируемых строк? Было бы 340, если бы -пять чисел суммировались как положительные.
5. Мартин спасибо… проблема в том fixed…it возвращал двойное значение … извините за боль, ребята
Ответ №1:
Чтобы вычесть отрицательные числа, а не добавлять их, вы бы использовали SUM(ABS(col))
, но просто чтобы проверить, что это то, что вам действительно нужно, пример результатов ниже.
WITH YourTable(col) AS
(
SELECT 2 UNION ALL
SELECT -5
)
SELECT
SUM(ABS(col)) AS [SUM(ABS(col))],
SUM(col) AS [SUM(col)]
FROM YourTable
ВОЗВРАТ
SUM(ABS(col)) SUM(col)
------------- -----------
7 -3
Ответ №2:
SELECT SUM(ABS(Column_Name)) FROM Table_Name;