2016-11-23 10 views
0

Если есть номер столбца, который имеет 5 строк следующим образом:Как найти Сумма положительных значений и отрицательных значений отдельно в колонке

+----------+ 
| values | 
+----------+ 
| -2  | 
| -1  | 
| 0  | 
| 1  | 
| 2  | 
| 3  | 
+----------+ 

мне нужна сумма всех отрицательных значений, а сумма всех положительные значения в моих результатах.

+1

Что такое текущий подход? –

+0

Выберите структуру набора результатов. Что бы это было, 2 столбца или 2 ряда? –

+0

РЕЗУЛЬТАТ - ДВА КОЛОННЫ ОДНА ДОЛЖНА ПОКАЗАТЬ СУММУ ПОЗИТИВНЫХ ЗНАЧЕНИЙ И ДРУГОГО СУММЫ ОТРИЦАТЕЛЬНЫХ ЗНАЧЕНИЙ –

ответ

1

Используя выражение CASE:

SELECT SUM(CASE WHEN col > 0 THEN col ELSE 0 END) AS posSum, 
     SUM(CASE WHEN col < 0 THEN col ELSE 0 END) AS negSum 
FROM yourTable 
+0

Выявление случая. – jarlh

1

контекст Проблема не ясна. Итак, я предполагаю, что это данные, хранящиеся в таблице РСУБД. Я также предполагаю, что вы хотите использовать язык SQL для получения результатов.

предположим, что таблица DATA_TABLE и имя столбца, которое нас интересует VALUE то, запрос должен выглядеть

SELECT 
    SUM(CASE WHEN VALUE > 0 THEN VALUE ELSE 0 END) POSITIVE_BALANCE, 
    SUM(CASE WHEN VALUE < 0 THEN VALUE ELSE 0) NEGATIVE_BALANCE 
FROM DATA_TABLE; 

Если предположения неверны, пожалуйста, измените ваш вопрос более подробно, контексте вопросов и среды программирования где вы хотите его решить.

0
SELECT SUM(values) FROM yourTable WHERE value <> 0 GROUP BY SIGN(values) 

Edit:

SQL> SELECT * FROM NUMBER_DATA WHERE value <> 0; 

    VALUE 
---------- 
     2 
     -3 
     4 
     5 
     -9 
     1 
     5 
     7 
     -8 
     10 
SQL> SELECT SIGN(VALUE), SUM(VALUE) FROM NUMBER_DATA WHERE value <> 0 GROUP BY SIGN(VALUE); 

SIGN(VALUE) SUM(VALUE) 
----------- ---------- 
      1   34 
     -1  -20 
+0

Это не будет делать работу без фильтрации –

+0

Кроме того, группа по столбцу 'SIGN (values)' также должна быть частью 'SELECT', иначе как узнать, какая строка для суммы положительных значений и какая сумма негативы? –

+0

SELECT SUM (_values), CASE КОГДА SIGN (_values) = 1 THEN 'SUM' ELSE 'SUBTRACT' END FROM #YourTable GROUP BY SIGN (_values) – Mansoor

1

Я думаю, вам нужно объединить кудель запросы в один, как это:

SELECT (SELECT SUM(col) FROM my_table WHERE col > 0) as positive_val, 
(SELECT SUM(col) FROM my_table WHERE col < 0) as negative_val