SQL: вычислить несколько строк для получения результата

#sql #sql-server #tsql #stored-procedures

#sql #sql-сервер #tsql #хранимые процедуры

Вопрос:

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

 Name     Type     Value
------------------------------
Name1    Plus     5000
Name1    Minus    1000
Name2    Plus     3000
Name2    Minus    2000
  

Желаемый результат:

 Name     Value(Plus-Minus) 
------------------------------
Name1    4000
Name2    1000
  

Комментарии:

1. опубликуйте свои попытки.

Ответ №1:

Используйте условную агрегацию и возьмите разницу всех значений «плюс» за вычетом всех значений «минус» для каждой группы имен записей.

 SELECT
    Name,
    SUM(CASE WHEN Type = 'Plus' THEN [Value] ELSE 0 END) -
    SUM(CASE WHEN Type = 'Minus' THEN [Value] ELSE 0 END) AS diff
FROM yourTable
GROUP BY
    Name;
  

Ответ №2:

Вы можете использовать условную агрегацию:

 SELECT Name,
       SUM(CASE WHEN Type = 'Plus' THEN Value
                WHEN Type = 'Minus' THEN - Value
                ELSE 0
           END) as total
FROM t
GROUP BY Name;